From b142e8e20a00eb756d755994eedb5a78537b3354 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Mon, 17 Sep 2012 08:45:08 +0200 Subject: [PATCH 01/24] Bug 378930: ArrayStoreException collecting fields. --- .../org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java index cbf9327dcfe..103c6ca0431 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java @@ -170,7 +170,7 @@ public class CStructure extends PlatformObject implements ICompositeType, ICInte for (IASTDeclarator declarator : declarators) { IASTName name = ASTQueries.findInnermostDeclarator(declarator).getName(); IBinding binding = name.resolveBinding(); - if (binding != null) + if (binding instanceof IField) fields = ArrayUtil.append(fields, (IField) binding); } } From 22747c0877f090ac1aa9ae6aa2c8020f73a7c83d Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Mon, 17 Sep 2012 11:10:38 +0200 Subject: [PATCH 02/24] Bug 379604: Discard template functions where explicit args do not match from function set. --- .../parser/tests/ast2/AST2TemplateTests.java | 10 ++++++++++ .../parser/cpp/semantics/CPPSemantics.java | 20 +++++++++++++------ .../semantics/TemplateArgumentDeduction.java | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) 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 0bc7d6659da..6293e200fac 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 @@ -6034,4 +6034,14 @@ public class AST2TemplateTests extends AST2BaseTest { public void testDeductionOfNonTypeTemplateArg_372587() throws Exception { parseAndCheckBindings(getAboveComment(), CPP, true); } + + // template void b(_Functor __f) {} + // template void f(T __first, T __last, const V& __val) {} + // template void f(T __first, T __last, const T& __val) {} + // void test() { + // b(f); + // } + public void testFunctionSetWithNonMatchingTemplateArgs_379604() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 6fb0de1789f..79be7bacf19 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -196,6 +196,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespace; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespaceScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClass; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownConstructor; @@ -2496,13 +2497,20 @@ public class CPPSemantics { if (haveASTResult && fromIndex) break; + boolean isCandidate; if (f instanceof ICPPFunctionTemplate) { - // Works only if there are template arguments - if (args == null || result != null) - return null; - result= f; - haveASTResult= !fromIndex; - } else if (args == null) { + if (args == null) { + isCandidate= true; + } else { + // See 14.3-7 + final ICPPTemplateParameter[] tpars = ((ICPPFunctionTemplate) f).getTemplateParameters(); + final CPPTemplateParameterMap map = new CPPTemplateParameterMap(tpars.length); + isCandidate= TemplateArgumentDeduction.addExplicitArguments(tpars, args, map, point); + } + } else { + isCandidate= args == null; + } + if (isCandidate) { if (result != null) return null; result= f; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java index e921895e1fb..8b09603afdd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java @@ -439,7 +439,7 @@ public class TemplateArgumentDeduction { /** * Adds the explicit arguments to the map. */ - private static boolean addExplicitArguments(final ICPPTemplateParameter[] tmplParams, + public static boolean addExplicitArguments(final ICPPTemplateParameter[] tmplParams, ICPPTemplateArgument[] tmplArgs, CPPTemplateParameterMap map, IASTNode point) { tmplArgs= SemanticUtil.getSimplifiedArguments(tmplArgs); ICPPTemplateParameter tmplParam= null; From 718ba6dfa7cd2d118aaba39c7a580586794772c9 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Fri, 14 Sep 2012 13:22:34 -0400 Subject: [PATCH 03/24] Bug 389527: Update DSF-GDB preference page help Change-Id: Ie0fb6937ff73f15525db2bdd178464b6bdc9a2d7 Reviewed-on: https://git.eclipse.org/r/7766 Reviewed-by: John Cortell IP-Clean: John Cortell Tested-by: John Cortell Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../META-INF/MANIFEST.MF | 2 +- .../contexts_CDT_DEBUGGER_DSFGDB.xml | 8 +- .../images/cdt_dsfgdb_preferences_page.png | Bin 17943 -> 150116 bytes doc/org.eclipse.cdt.doc.user/pom.xml | 2 +- .../reference/cdt_u_dsfgdb.htm | 114 ++++++++++++++++-- 5 files changed, 107 insertions(+), 19 deletions(-) diff --git a/doc/org.eclipse.cdt.doc.user/META-INF/MANIFEST.MF b/doc/org.eclipse.cdt.doc.user/META-INF/MANIFEST.MF index 59a8c62e03d..6b17a68264b 100644 --- a/doc/org.eclipse.cdt.doc.user/META-INF/MANIFEST.MF +++ b/doc/org.eclipse.cdt.doc.user/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.doc.user; singleton:=true -Bundle-Version: 5.2.0.qualifier +Bundle-Version: 5.3.0.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-ActivationPolicy: lazy diff --git a/doc/org.eclipse.cdt.doc.user/contexts_CDT_DEBUGGER_DSFGDB.xml b/doc/org.eclipse.cdt.doc.user/contexts_CDT_DEBUGGER_DSFGDB.xml index f5fe3e23822..1130ab9c6a6 100644 --- a/doc/org.eclipse.cdt.doc.user/contexts_CDT_DEBUGGER_DSFGDB.xml +++ b/doc/org.eclipse.cdt.doc.user/contexts_CDT_DEBUGGER_DSFGDB.xml @@ -2,7 +2,7 @@ - + ]> @@ -12,12 +12,10 @@ label="&defaultCSHelp;"/> - Control the behavior of the C/C++ debugger when debugging with GDB, specifically when using a GDB (DSF) launcher. - + Control the behavior of the C/C++ debugger when debugging with GDB, specifically when using a GDB (DSF) launcher. Click below to see detailed help. + This checkbox controls whether the CDT debugger will ask gdb for the target program's thread list on each suspend event (breakpoint-hit, step, etc). Normally, this isn't necessary, as GDB sends notifications in realtime when a thread is created or destroyed. However, some lightweight GDB remote stubs won't send these notifications. As such, the CDT debugger doesn't find out about new or destroyed threads unless it polls gdb. Turn on this option if you are debugging such a target (typically an embedded one). - - diff --git a/doc/org.eclipse.cdt.doc.user/images/cdt_dsfgdb_preferences_page.png b/doc/org.eclipse.cdt.doc.user/images/cdt_dsfgdb_preferences_page.png index c810b8743c8649a8b004f2cd8b17b0e68b42a6b3..73e67454fb403488af36a405b17aa0ee17e6d429 100644 GIT binary patch literal 150116 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 literal 17943 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 X`nJwnr6$0pArN@F`njxgN@xNAiZ5Ms diff --git a/doc/org.eclipse.cdt.doc.user/pom.xml b/doc/org.eclipse.cdt.doc.user/pom.xml index 337e431b85e..5c69a990f52 100644 --- a/doc/org.eclipse.cdt.doc.user/pom.xml +++ b/doc/org.eclipse.cdt.doc.user/pom.xml @@ -10,7 +10,7 @@ ../../pom.xml - 5.2.0-SNAPSHOT + 5.3.0-SNAPSHOT org.eclipse.cdt.doc.user eclipse-plugin diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm index f07bf3a3a33..bad7c2b0e2f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm @@ -12,7 +12,7 @@

GDB Debugging Preferences

-

Use the GDB preferences panel to control how the CDT debugger behaves when debugging with GDB, +

Use this preferences panel to control how the CDT debugger behaves when debugging with GDB, specifically when using a GDB (DSF) launcher.

GDB preferences panel

@@ -20,31 +20,121 @@ specifically when using a GDB (DSF) launcher.

- - + + + + - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + +
GDB Preference Panel Options
Category Option Description
Enable GDB tracesWhen checked, the debug session will produce an additional console which will contain all the gdb/mi activity. Basically, this details the - interaction between the CDT debugger and GDB. This information is often critical when the debugger is not behaving as you expect. Turn this on and submit - the console output when submitting a bugzilla report against the CDT debugger.Debug Configurations Defaults
GDB debuggerSpecifies the GDB debugger binary that will be used by default for each + newly created debug launch. Using an absolute path will directly point to the binary (e.g, /home/user/myGdb), + while using a binary name will have CDT look through the PATH variable for that binary (e.g., myGdb). This can + be useful of your GDB binary is not named 'gdb'. Each launch configuration allows to override this setting in + the Debugger tab.
GDB command fileSpecifies the GDB debugger command file that will be used by default for each + newly created debug launch. This can be useful if you often/always want to use a GDB command file for your launches. + Each launch configuration allows to override this setting in the Debugger tab.
Stop on startupWhen checked, the CDT debugger will stop execution at the specified symbol when + launching or re-starting a process. By default, this setting makes the CDT debugger stop when entering 'main'.
Command timeoutWhen checked, the CDT debugger will abort the debug session if any command sent + to GDB does not get an answer before the specified timeout. Using this can prevent debug sessions from hanging forever + when debugging un-reliable targets. +

+ Using the Advanced... button allows to set a different timeout for individual commands. A value of zero can be + used to specify "no timeout" for a particular command. MI commands must start with a hyphen ('-'). + For example, '-target-select'.

Non-stop modeWhen checked, the CDT debugger will run in non-stop mode for each newly created + debug launch. Non-stop mode allows each thread of a debug session to be controlled independently. This allows to stop + one or more threads while leaving others running. In contrast, all-stop mode interrupts and resumes all threads at the + same time. Note that non-stop mode is only available starting with GDB 7.0.
General Behavior
Terminate GDB when last process exitsWhen checked, the CDT debugger will terminate the GDB host process after all the target processes it is debugging have terminated. Otherwise it will leave it running.When checked, the CDT debugger will terminate the GDB + process (on the host) after all the target processes it is debugging have terminated. Otherwise it + will leave it running. It can be useful to keep GDB running if you expect to want to attach or create + new processes to debug after the previously debugged processes have terminated.
Use enhanced debug hoverWhen checked, hovering over an expression in the editor during a debug session will bring up an enhanced expression evaluation control. Otherwise, a more basic control is used. This, of course, assumes that you have the debugger's hovering capability turned on in C/C++ > Editor > Hovers. If not, this checkbox has no effect.
- debug hover modes
When checked, hovering over an expression in the editor during a + debug session will bring up an enhanced expression evaluation control. Otherwise, a more basic + control is used. This, of course, assumes that you have the debugger's hovering capability turned on in + C/C++ > Editor > Hovers. If not, this checkbox has no effect.
+ debug hover modes
Show only suspended threads in the Debug viewWhen checked, the Debug view will only show threads that are suspended. + When dealing with a large number of threads, this helps focus on the threads being inspected. Obviously, + this option is only valuable in non-stop mode, where some threads can run while others are stopped.
Enable GDB tracesWhen checked, the debug session will produce an additional console which + will contain all the gdb/mi activity. Basically, this details the interaction between the CDT debugger and GDB. + This information is often critical when the debugger is not behaving as you expect. Include this console output + when submitting a bugzilla report against the CDT debugger. It is recommended to keep this setting enabled at + all times, as it does not cause any negative effect.
Pretty Printing
Enable pretty printers in variable/expression treeWhen checked, the CDT Debugger will display STL types in a user-friendly + fashion. This can be seen in the Variables and Expressions views, as well as in the advanced editor hover. + For example, Maps, Lists and Vectors will be shown in an array-style format instead of showing the + details of the actual implementation of the data struture. Note that pretty printing requires a GDB that + has python support enabled and the user of STL pretty-printers.
For collections, initially limit child count toWhen using pretty printing, collections (e.g., Maps, Lists, etc) can contain + a large number of elements. Trying to display all this children at once can cause very poor responsiveness. This + value will limit the number of children displayed initially, while allowing the user to manually request more + children directly from the view.

Related reference
-GDB MI Debug preferences


IBM Copyright Statement

From c79f305503a8dc0dfb6ecbf2ff33641ab5800f35 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Sun, 16 Sep 2012 17:13:39 -0700 Subject: [PATCH 04/24] Cosmetics. --- .../core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java index e64d8f92751..f6bfe15fca8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java @@ -65,7 +65,7 @@ class PDOMCPPDeferredClassInstance extends PDOMCPPSpecialization final ICPPTemplateArgument[] args= classType.getTemplateArguments(); final long argListRec= PDOMCPPArgumentList.putArguments(this, args); - getDB().putRecPtr(record+ARGUMENTS, argListRec); + getDB().putRecPtr(record + ARGUMENTS, argListRec); } public PDOMCPPDeferredClassInstance(PDOMLinkage linkage, long bindingRecord) { @@ -220,7 +220,7 @@ class PDOMCPPDeferredClassInstance extends PDOMCPPSpecialization @Override public ICPPTemplateArgument[] getTemplateArguments() { try { - final long rec= getPDOM().getDB().getRecPtr(record+ARGUMENTS); + final long rec= getPDOM().getDB().getRecPtr(record + ARGUMENTS); return PDOMCPPArgumentList.getArguments(this, rec); } catch (CoreException e) { CCorePlugin.log(e); From 5e58ee712545f6e8de6e5ff4db3d5ab89208cd1c Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Tue, 18 Sep 2012 09:59:52 -0400 Subject: [PATCH 05/24] Typos in javadoc Change-Id: I560f7c21964a219010a06f7ed18d233e1a53d152 --- .../src/org/eclipse/cdt/core/IAddress.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java index 59bb8c76129..54d572d7ad6 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java @@ -33,8 +33,8 @@ public interface IAddress extends Comparable { /** * Adds offset to address and returns new address object * which is the result - *

Note: This method has an offset limit of Long.MAX and Long.MIN, which under some addressing schems - * may impose an unnesseary limitation, see IAddressa.add(BigInteger offset) to handle larger offsets. + *

Note: This method has an offset limit of Long.MAX and Long.MIN, which under some addressing schemes + * may impose an unnecessary limitation, see IAddress.add(BigInteger offset) to handle larger offsets. * @param offset to add * @return the new address */ @@ -42,7 +42,7 @@ public interface IAddress extends Comparable { /** * Returns maximal offset possible for address. The offset - * should be Identicall for all addresses of given class. + * should be identical for all addresses of given class. * @return the max offset for this address class */ BigInteger getMaxOffset(); @@ -83,7 +83,7 @@ public interface IAddress extends Comparable { /** * Converts address to string as an unsigned number with given radix - * @param radix to use for strng conversion + * @param radix to use for string conversion * @return a string representation of address */ String toString(int radix); @@ -113,9 +113,9 @@ public interface IAddress extends Comparable { /** * Returns amount of symbols in hex representation. Is identical to - * toHexAddressString().length(). It is present for perfomance purpose. + * toHexAddressString().length(). It is present for performance purpose. * - * @return the nmber os chararcter symbols to represent this address in hex. + * @return the number of character symbols to represent this address in hex. */ int getCharsNum(); From 52cf5f2b85a28a2ade9cbebd0e44a5e42e7ecbe1 Mon Sep 17 00:00:00 2001 From: Vivian Kong Date: Wed, 19 Sep 2012 17:16:24 -0400 Subject: [PATCH 06/24] Bug 389951 - [Accessibility] CDT documentation has accessibility issues --- doc/org.eclipse.cdt.doc.user/about.html | 5 ++-- .../concepts/cdt_c_before_you_begin.htm | 4 ++- .../concepts/cdt_c_brkpnts.htm | 5 ++-- .../concepts/cdt_c_build_over.htm | 4 ++- .../concepts/cdt_c_comments.htm | 6 ++--- .../concepts/cdt_c_content_assist.htm | 6 ++--- .../concepts/cdt_c_dbg_info.htm | 6 ++--- .../concepts/cdt_c_discovery_options.htm | 4 ++- .../concepts/cdt_c_editor.htm | 4 ++- .../concepts/cdt_c_indexer.htm | 4 ++- .../concepts/cdt_c_indexer_fullindexer.htm | 4 ++- .../concepts/cdt_c_indexer_prog_bar.htm | 4 ++- .../concepts/cdt_c_makefile.htm | 5 ++-- .../concepts/cdt_c_open_declarations.htm | 6 ++--- .../concepts/cdt_c_outlineview.htm | 6 ++--- .../concepts/cdt_c_over_cdt.htm | 6 ++--- .../concepts/cdt_c_over_dbg.htm | 6 ++--- .../concepts/cdt_c_perspectives.htm | 5 ++-- .../concepts/cdt_c_proj_file_views.htm | 6 ++--- .../concepts/cdt_c_projects.htm | 6 ++--- .../concepts/cdt_c_search.htm | 6 ++--- .../concepts/cdt_c_templates.htm | 6 ++--- .../concepts/cdt_c_views.htm | 4 ++- .../concepts/cdt_c_whatsnew.htm | 12 +++++---- .../concepts/cdt_c_whatsnew_60.htm | 6 ++--- .../concepts/cdt_c_whatsnew_70.htm | 6 ++--- .../concepts/cdt_c_whatsnew_80.htm | 6 ++--- .../concepts/cdt_o_build_conc.htm | 5 ++-- .../concepts/cdt_o_code_entry.htm | 6 ++--- .../concepts/cdt_o_concepts.htm | 5 ++-- .../concepts/cdt_o_dbg_concepts.htm | 6 ++--- .../concepts/cdt_o_edit.htm | 6 ++--- .../concepts/cdt_o_home.htm | 6 ++--- .../concepts/cdt_o_nav.htm | 6 ++--- .../getting_started/cdt_o_tutorial.htm | 4 ++- .../getting_started/cdt_w_basic.htm | 4 +-- .../getting_started/cdt_w_build.htm | 4 +-- .../getting_started/cdt_w_debug.htm | 6 ++--- .../getting_started/cdt_w_existing_code.htm | 4 +-- .../getting_started/cdt_w_import.htm | 8 +++--- .../getting_started/cdt_w_install_cdt.htm | 4 +-- .../getting_started/cdt_w_newcpp.htm | 14 +++++------ .../getting_started/cdt_w_newmake.htm | 4 +-- .../getting_started/cdt_w_newproj.htm | 4 +-- .../cdt_w_prepare_workbench.htm | 4 +-- .../getting_started/hw_example.htm | 5 ++-- .../getting_started/make_example.htm | 5 ++-- doc/org.eclipse.cdt.doc.user/notices.html | 4 ++- .../reference/cdt_o_ceditor_pref.htm | 4 +-- .../reference/cdt_o_dbg_view.htm | 4 +-- .../reference/cdt_o_menu.htm | 4 +-- .../reference/cdt_o_mproj_pref.htm | 4 +-- .../reference/cdt_o_mproj_pref_macro.htm | 4 +-- .../reference/cdt_o_new_mproj.htm | 4 +-- .../reference/cdt_o_new_sproj.htm | 4 +-- .../reference/cdt_o_proj_prop_pages.htm | 4 +-- .../reference/cdt_o_prop_file.htm | 4 +-- .../reference/cdt_o_prop_folder.htm | 4 +-- .../reference/cdt_o_prop_proj.htm | 4 +-- .../reference/cdt_o_ref.htm | 4 +-- .../reference/cdt_o_run_dbg_pages.htm | 4 +-- .../reference/cdt_o_views.htm | 4 +-- .../reference/cdt_u_appearance_pref.htm | 4 +-- .../reference/cdt_u_c_code_style_pref.htm | 4 +-- .../reference/cdt_u_c_code_templates_pref.htm | 4 +-- .../reference/cdt_u_c_editor_color.htm | 4 +-- .../reference/cdt_u_c_editor_con_assist.htm | 4 +-- .../cdt_u_c_editor_con_assist_adv.htm | 4 +-- .../reference/cdt_u_c_editor_folding.htm | 4 +-- .../reference/cdt_u_c_editor_gen.htm | 4 +-- .../reference/cdt_u_c_editor_hov.htm | 4 +-- .../cdt_u_c_editor_mark_occurrences.htm | 4 +-- .../reference/cdt_u_c_editor_save_actions.htm | 4 +-- .../reference/cdt_u_c_editor_scalability.htm | 4 +-- .../reference/cdt_u_c_editor_typing.htm | 4 +-- .../reference/cdt_u_c_file_types.htm | 4 +-- .../reference/cdt_u_c_pref.htm | 4 +-- .../reference/cdt_u_call_hierarchy_view.htm | 4 +-- .../reference/cdt_u_code_temp.htm | 4 +-- .../reference/cdt_u_console_pref.htm | 4 +-- .../reference/cdt_u_console_view.htm | 4 +-- .../reference/cdt_u_cproj_view.htm | 4 +-- .../reference/cdt_u_create_make_target.htm | 4 +-- .../reference/cdt_u_dbg_breadcrumb.htm | 4 +-- .../reference/cdt_u_dbg_brkpt_actions.htm | 4 +-- .../reference/cdt_u_dbg_pref.htm | 4 +-- .../reference/cdt_u_dbg_src.htm | 4 +-- .../reference/cdt_u_dbg_view.htm | 4 +-- .../reference/cdt_u_debug.htm | 4 +-- .../reference/cdt_u_discovery_preferences.htm | 4 +-- .../reference/cdt_u_dissassembly_view.htm | 4 +-- .../reference/cdt_u_dsfgdb.htm | 6 ++--- .../reference/cdt_u_editor_view.htm | 4 +-- .../reference/cdt_u_environment_pref.htm | 4 +-- .../reference/cdt_u_fileprop_discovery.htm | 4 +-- .../reference/cdt_u_fileprop_inc.htm | 4 +-- .../reference/cdt_u_fileprop_lang_mapp.htm | 4 +-- .../reference/cdt_u_fileprop_lng.htm | 4 +-- .../reference/cdt_u_fileprop_steps.htm | 4 +-- .../reference/cdt_u_fileprop_sym.htm | 4 +-- .../reference/cdt_u_fileprop_toolsettings.htm | 4 +-- .../reference/cdt_u_find_replace.htm | 4 +-- .../reference/cdt_u_fprop_discovery.htm | 4 +-- .../reference/cdt_u_fprop_resource.htm | 4 +-- .../reference/cdt_u_fprop_toolsettings.htm | 4 +-- .../reference/cdt_u_gdb_mi.htm | 4 +-- .../reference/cdt_u_icons.htm | 4 +-- .../reference/cdt_u_include_browser_view.htm | 4 +-- .../reference/cdt_u_indexer_preference.html | 4 +-- .../reference/cdt_u_language_mapping_pref.htm | 4 +-- .../reference/cdt_u_m_edit.htm | 4 +-- .../reference/cdt_u_m_file.htm | 4 +-- .../reference/cdt_u_m_navigate.htm | 4 +-- .../reference/cdt_u_m_project.htm | 4 +-- .../reference/cdt_u_m_refactor.htm | 4 +-- .../reference/cdt_u_m_run.htm | 4 +-- .../reference/cdt_u_m_search.htm | 4 +-- .../reference/cdt_u_m_window.htm | 2 +- .../reference/cdt_u_make_pref.htm | 4 +-- .../reference/cdt_u_make_settings_pref.htm | 4 +-- .../reference/cdt_u_make_targets_view.htm | 4 +-- .../cdt_u_makefile_settings_pref.htm | 4 +-- .../reference/cdt_u_mem_view_pref.htm | 4 +-- .../reference/cdt_u_memoryview.htm | 4 +-- .../reference/cdt_u_mfile_build.htm | 4 +-- .../reference/cdt_u_mfile_info.htm | 4 +-- .../reference/cdt_u_mfile_rcbs.htm | 4 +-- .../reference/cdt_u_mfile_tool_settings.htm | 4 +-- .../reference/cdt_u_modules_view.htm | 4 +-- .../reference/cdt_u_navigator_view.htm | 2 +- .../reference/cdt_u_new_proj_wiz.htm | 4 +-- .../reference/cdt_u_new_proj_wiz_config.htm | 4 +-- .../reference/cdt_u_new_proj_wiz_name.htm | 4 +-- .../cdt_u_new_proj_wiz_toolchain.htm | 4 +-- .../reference/cdt_u_new_proj_wiz_type.htm | 4 +-- .../reference/cdt_u_newproj_behavior.htm | 4 +-- .../reference/cdt_u_newproj_buildset.htm | 4 +-- .../reference/cdt_u_newproj_def_symb.htm | 4 +-- .../cdt_u_newproj_discovery_options.htm | 4 +-- .../reference/cdt_u_newproj_parser_binary.htm | 4 +-- .../reference/cdt_u_newproj_parser_error.htm | 4 +-- .../reference/cdt_u_newproj_platf.htm | 4 +-- .../reference/cdt_u_open_element.htm | 4 +-- .../reference/cdt_u_outline_view.htm | 4 +-- .../reference/cdt_u_pref_build.htm | 4 +-- .../cdt_u_pref_build_error_parsers.htm | 4 +-- .../reference/cdt_u_pref_build_vars.htm | 4 +-- .../reference/cdt_u_pref_multi_cfg.htm | 4 +-- .../reference/cdt_u_pref_prop_pages.htm | 4 +-- .../reference/cdt_u_pref_task_tags.htm | 4 +-- .../reference/cdt_u_pref_wizard_defaults.htm | 4 +-- .../cdt_u_pref_wizard_toolchains.htm | 4 +-- .../reference/cdt_u_problems_view.htm | 4 +-- .../reference/cdt_u_project_explorer_view.htm | 4 +-- .../reference/cdt_u_prop_all.htm | 4 +-- .../reference/cdt_u_prop_build.htm | 4 +-- .../reference/cdt_u_prop_build_discovery.htm | 6 ++--- .../cdt_u_prop_build_environment.htm | 4 +-- .../cdt_u_prop_build_settings_artifact.htm | 4 +-- .../cdt_u_prop_build_settings_binparser.htm | 4 +-- .../cdt_u_prop_build_settings_errparser.htm | 4 +-- .../cdt_u_prop_build_settings_steps.htm | 4 +-- .../cdt_u_prop_build_settings_tool.htm | 4 +-- .../reference/cdt_u_prop_build_toolchain.htm | 4 +-- .../reference/cdt_u_prop_build_variables.htm | 4 +-- .../reference/cdt_u_prop_builders.htm | 4 +-- .../reference/cdt_u_prop_cfg_dialog.htm | 4 +-- .../reference/cdt_u_prop_general.htm | 4 +-- .../reference/cdt_u_prop_general_doc.htm | 4 +-- .../reference/cdt_u_prop_general_exp.htm | 4 +-- .../reference/cdt_u_prop_general_idx.htm | 4 +-- .../reference/cdt_u_prop_general_lng.htm | 4 +-- .../reference/cdt_u_prop_general_pns_hier.htm | 4 +-- .../reference/cdt_u_prop_general_pns_inc.htm | 4 +-- .../reference/cdt_u_prop_general_pns_lib.htm | 4 +-- .../cdt_u_prop_general_pns_libpath.htm | 4 +-- .../reference/cdt_u_prop_general_pns_out.htm | 4 +-- .../reference/cdt_u_prop_general_pns_ref.htm | 4 +-- .../reference/cdt_u_prop_general_pns_src.htm | 4 +-- .../reference/cdt_u_prop_general_pns_sym.htm | 4 +-- .../reference/cdt_u_prop_general_typ.htm | 4 +-- .../reference/cdt_u_prop_manage_dialog.htm | 4 +-- .../reference/cdt_u_prop_manage_newdialog.htm | 4 +-- .../reference/cdt_u_prop_manage_rendialog.htm | 4 +-- .../reference/cdt_u_prop_ref.htm | 4 +-- .../cdt_u_prop_refactoring_history.htm | 4 +-- .../reference/cdt_u_prop_resource.htm | 4 +-- .../reference/cdt_u_prop_rundebug.htm | 4 +-- .../reference/cdt_u_properties.htm | 4 +-- .../reference/cdt_u_properties_view.htm | 2 +- .../reference/cdt_u_registersview.htm | 4 +-- .../reference/cdt_u_run_dbg_arg.htm | 4 +-- .../reference/cdt_u_run_dbg_comm.htm | 4 +-- .../reference/cdt_u_run_dbg_dbg.htm | 4 +-- .../reference/cdt_u_run_dbg_env.htm | 4 +-- .../reference/cdt_u_run_dbg_launch_group.htm | 25 +++++++++++-------- .../reference/cdt_u_run_dbg_main.htm | 4 +-- .../reference/cdt_u_run_dbg_srce.htm | 4 +-- .../reference/cdt_u_scanner_cfg_disc.htm | 4 +-- .../reference/cdt_u_search.htm | 4 +-- .../reference/cdt_u_search_view.htm | 4 +-- .../reference/cdt_u_signals_view.htm | 4 +-- .../reference/cdt_u_tasks_view.htm | 4 +-- .../reference/cdt_u_toolbar.htm | 4 +-- .../reference/cdt_u_type_hierarchy_view.htm | 4 +-- .../reference/cdt_u_view_executables.htm | 4 +-- .../reference/cdt_u_views.htm | 4 +-- .../tasks/cdt_o_brkpnts_watch.htm | 4 +-- .../tasks/cdt_o_build_task.htm | 4 +-- .../tasks/cdt_o_builderrors.htm | 4 +-- .../tasks/cdt_o_con_assist.htm | 4 +-- .../tasks/cdt_o_debug.htm | 4 +-- .../tasks/cdt_o_proj_files.htm | 4 +-- .../tasks/cdt_o_run.htm | 4 +-- .../tasks/cdt_o_run_config.htm | 4 +-- .../tasks/cdt_o_tasks.htm | 4 +-- .../tasks/cdt_o_write_code.htm | 4 +-- .../tasks/cdt_t_add_brk_action.htm | 4 +-- .../tasks/cdt_t_add_brkpnts.htm | 4 +-- .../tasks/cdt_t_add_build_var.htm | 4 +-- .../tasks/cdt_t_add_codetemp.htm | 4 +-- .../tasks/cdt_t_add_custom_persp.htm | 4 +-- .../tasks/cdt_t_add_watch.htm | 4 +-- .../tasks/cdt_t_addmaketarget.htm | 4 +-- .../tasks/cdt_t_addrmv_brk_action.htm | 4 +-- .../tasks/cdt_t_autobuild.htm | 4 +-- .../tasks/cdt_t_autosave.htm | 4 +-- .../tasks/cdt_t_build_process.htm | 4 +-- .../tasks/cdt_t_cbuild_pref.htm | 4 +-- .../tasks/cdt_t_comment_out.htm | 4 +-- .../tasks/cdt_t_contentassist.htm | 4 +-- .../tasks/cdt_t_controldebug.htm | 4 +-- .../tasks/cdt_t_conv_proj.htm | 4 +-- .../tasks/cdt_t_convert_cdt_proj.htm | 4 +-- .../tasks/cdt_t_convert_mbs20_proj.htm | 4 +-- .../tasks/cdt_t_create_make_target.htm | 4 +-- .../tasks/cdt_t_cust_cpp_editor.htm | 4 +-- .../tasks/cdt_t_debug_exes.htm | 4 +-- .../tasks/cdt_t_debug_prog.htm | 4 +-- .../tasks/cdt_t_disassembly.htm | 4 +-- .../tasks/cdt_t_discovery.htm | 4 +-- .../tasks/cdt_t_endis_able_brk_wtch.htm | 4 +-- .../tasks/cdt_t_expressions.htm | 4 +-- .../tasks/cdt_t_filtererror.htm | 4 +-- .../tasks/cdt_t_imp_code_temp.htm | 4 +-- .../tasks/cdt_t_jumperror.htm | 4 +-- .../tasks/cdt_t_manualbuild.htm | 4 +-- .../tasks/cdt_t_memory.htm | 12 ++++----- .../tasks/cdt_t_new_cpp.htm | 4 +-- .../tasks/cdt_t_new_make.htm | 6 ++--- .../tasks/cdt_t_new_run_config.htm | 4 +-- .../tasks/cdt_t_open_declarations.htm | 4 +-- .../tasks/cdt_t_proj_build_set.htm | 4 +-- .../tasks/cdt_t_proj_error_parser.htm | 4 +-- .../tasks/cdt_t_proj_new.htm | 4 +-- .../tasks/cdt_t_proj_new_with_template.htm | 4 +-- .../tasks/cdt_t_proj_parser.htm | 4 +-- .../tasks/cdt_t_proj_paths.htm | 4 +-- .../tasks/cdt_t_proj_platf.htm | 4 +-- .../tasks/cdt_t_proj_referenced_configs.htm | 4 +-- .../tasks/cdt_t_proj_rename.htm | 4 +-- .../tasks/cdt_t_prvw_hide_files.htm | 4 +-- .../tasks/cdt_t_refactoring.htm | 4 +-- .../tasks/cdt_t_registers.htm | 4 +-- .../tasks/cdt_t_rem_wtch_brk.htm | 4 +-- .../tasks/cdt_t_rename.htm | 4 +-- .../tasks/cdt_t_run_arg.htm | 4 +-- .../tasks/cdt_t_run_com.htm | 4 +-- .../tasks/cdt_t_run_config.htm | 4 +-- .../tasks/cdt_t_run_dbg.htm | 4 +-- .../tasks/cdt_t_run_env.htm | 4 +-- .../tasks/cdt_t_run_main.htm | 4 +-- .../tasks/cdt_t_run_source.htm | 4 +-- .../tasks/cdt_t_search.htm | 6 ++--- .../tasks/cdt_t_sel_search.htm | 4 +-- .../tasks/cdt_t_set_src_fold.htm | 4 +-- .../tasks/cdt_t_shift_code.htm | 4 +-- .../tasks/cdt_t_show_proj_files.htm | 4 +-- .../tasks/cdt_t_toggle.htm | 4 +-- .../tasks/cdt_t_variables.htm | 4 +-- 280 files changed, 628 insertions(+), 593 deletions(-) diff --git a/doc/org.eclipse.cdt.doc.user/about.html b/doc/org.eclipse.cdt.doc.user/about.html index dadc571e61f..7ceab074a2b 100644 --- a/doc/org.eclipse.cdt.doc.user/about.html +++ b/doc/org.eclipse.cdt.doc.user/about.html @@ -6,7 +6,8 @@ -

About This Content

+
+

About This Content

June 22, 2007

License

@@ -23,6 +24,6 @@ apply to your use of any object code in the Content. Check the Redistributor's provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise indicated below, the terms and conditions of the EPL still apply to any source code in the Content and such source code may be obtained at http://www.eclipse.org.

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_before_you_begin.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_before_you_begin.htm index af5dd46f540..f73c2bcdbc8 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_before_you_begin.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_before_you_begin.htm @@ -8,7 +8,8 @@ -

Before you begin

+
+

Before you begin

Depending on how you obtained the CDT, you might have also received a toolchain with a built-in CDT integration. @@ -70,6 +71,7 @@ on your platform, see your platform vendor.

QNX Copyright Statement

+
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_brkpnts.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_brkpnts.htm index 9f3eff0614c..605a7a7360b 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_brkpnts.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_brkpnts.htm @@ -9,7 +9,8 @@ -

Breakpoints

+
+

Breakpoints

A breakpoint suspends the execution of a program at the location where the breakpoint is set. To set a line breakpoint, right-click in the marker bar area on the left side of an editor beside @@ -56,7 +57,7 @@ from the menu bar choose Run > Debug. Red Hat Statement
IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_build_over.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_build_over.htm index 50de1e1a503..82365073e1d 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_build_over.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_build_over.htm @@ -7,7 +7,8 @@ -

Building C/C++ projects

+
+

Building C/C++ projects

The CDT relies on an external make utility, such as GNU make, to build a project. The CDT can generate makefiles automatically when you create a Managed Make C project or a Managed Make C++ project. You have @@ -156,5 +157,6 @@ Targets view.

Red Hat Copyright Statement
IBM Copyright Statement

+
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_comments.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_comments.htm index 70c806c7379..96a45629250 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_comments.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_comments.htm @@ -9,8 +9,8 @@ - -

Comments

+
+

Comments

Comments are lines in a source file that have been marked to be ignored by the compiler. Two styles of comments are supported by current C/C++ compilers:

    @@ -60,7 +60,7 @@ Type com+Ctrl+Space, and the following code is e Red Hat Copyright Statement
     IBM Copyright Statement

    - +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_content_assist.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_content_assist.htm index 56c451e45ff..714d7094d69 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_content_assist.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_content_assist.htm @@ -9,8 +9,8 @@ - -

Content Assist

+
+

Content Assist

Content Assist is a set of tools built into the CDT that can reduce the number of keystrokes you must type to create your code. The Content Assist plug-in consists of several components that forecast what @@ -92,7 +92,7 @@ main(int argc, char **argv) {

IBM Copyright Statement

- +
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_dbg_info.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_dbg_info.htm index 1544d0e8150..91e8a017742 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_dbg_info.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_dbg_info.htm @@ -11,8 +11,8 @@ - -

Debug information

+
+

Debug information

The Debug perspective lets you manage the debugging or running of a program in the Workbench. You can control the execution of your program by setting @@ -82,7 +82,7 @@ debugger handles each one.

Debug views

IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_discovery_options.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_discovery_options.htm index 3bcbe5ccb38..7e466d64120 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_discovery_options.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_discovery_options.htm @@ -9,7 +9,8 @@ -

Discovery options

+
+

Discovery options

For projects where the IDE generates a makefile to build the project automatically, the IDE has more information about the internal build state of the make project compared to those projects where you provide a makefile to build the project. @@ -47,6 +48,7 @@ Red Hat Copyright Statement
 IBM Copyright Statement

+
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_editor.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_editor.htm index 8316ece83db..1ebbfc266be 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_editor.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_editor.htm @@ -8,7 +8,8 @@ -

C/C++ editor

+
+

C/C++ editor

The CDT provides an editor that gives you specific support for editing C/C++ code. This C/C++ editor is invoked automatically when you edit a C/C++ source file.

@@ -45,5 +46,6 @@ This C/C++ editor is invoked automatically when you edit a C/C++ source file.


 IBM Copyright Statement

+
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer.htm index 1734becf5f1..faf05baebbe 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer.htm @@ -7,7 +7,8 @@ -

C/C++ Indexer

+
+

C/C++ Indexer

The C/C++ indexer uses the parser to create a database of your source and header files that provides the basis for C/C++ search, navigation features and parts of content assist.

@@ -58,5 +59,6 @@ dialog box

 

IBM Copyright Statement +
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_fullindexer.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_fullindexer.htm index 573ea07f901..c2ce9f3f0cd 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_fullindexer.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_fullindexer.htm @@ -7,7 +7,8 @@ -

Full C/C++ Indexer

+
+

Full C/C++ Indexer

The Full C/C++ Indexer is a new indexer for CDT 3.0 which makes use of the new DOM. It creates a full index of the project's source providing both declaration and cross reference information to the @@ -41,5 +42,6 @@ dialog box

 

IBM Copyright Statement +
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_prog_bar.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_prog_bar.htm index 5c8ffaf0bd0..6bc6fce8233 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_prog_bar.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_indexer_prog_bar.htm @@ -7,7 +7,8 @@ -

C/C++ Indexer Progress Bar

+
+

C/C++ Indexer Progress Bar

The indexer progress bar shows the progress status of the indexing jobs in the progress views.

The indexing jobs can be temporarily paused by pressing the stop @@ -40,5 +41,6 @@ dialog box

 

IBM Copyright Statement +
diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_makefile.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_makefile.htm index ac03a1366f8..50279d69968 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_makefile.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_makefile.htm @@ -9,7 +9,8 @@ -

Makefile

+
+

Makefile

A makefile is a text file that is referenced by the make command that describes the building of targets, and contains information such as source-level dependencies and build-order dependencies.

The CDT can generate a makefile for you, such projects are called Managed Make projects. Some projects, known as Standard Make projects, allow you to define your own makefile.

@@ -181,6 +182,6 @@ clean :

IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_open_declarations.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_open_declarations.htm index d88dd8e295d..6af3575e76a 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_open_declarations.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_open_declarations.htm @@ -9,8 +9,8 @@ - -

Open Declaration

+
+

Open Declaration

You can select an element name in your code and quickly navigate to its declaration.

@@ -34,7 +34,7 @@ If for any reason open declaration cannot find the declaration, it will display Searching for C/C++ elements

IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_outlineview.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_outlineview.htm index 99a663ecc10..28b23746941 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_outlineview.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_outlineview.htm @@ -9,8 +9,8 @@ - -

Outline view

+
+

Outline view

The Outline view displays an outline of a structured C/C++ file that is currently open in the editor area, by listing the structural elements.

@@ -125,7 +125,7 @@ Project Explorer view
 

IBM Copyright Statement - +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_cdt.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_cdt.htm index 2ebe7b3290d..d941daca15f 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_cdt.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_cdt.htm @@ -7,8 +7,8 @@ - -

CDT Overview

+
+

CDT Overview

The C/C++ Development Toolkit (CDT) is a set of Eclipse plug-ins that provide C and C++ extensions to the Eclipse workbench. For more information about Eclipse, see Workbench User Guide > Concepts > Workbench.

@@ -78,7 +78,7 @@ This is the main source for information around CDT. Views

IBM Copyright Statement - +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_dbg.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_dbg.htm index 0c315d4190b..f9c292a6a93 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_dbg.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_over_dbg.htm @@ -11,8 +11,8 @@ - -

Debug overview

+
+

Debug overview

The debugger lets you see what's going on "inside" a program while it executes.

@@ -40,7 +40,7 @@ trace.

Run and Debug dialog box

IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_perspectives.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_perspectives.htm index ecb5a0b3e1a..fafd54e5e0c 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_perspectives.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_perspectives.htm @@ -8,8 +8,8 @@ - -

Perspectives available to C/C++ developers

+
+

Perspectives available to C/C++ developers

A perspective is a layout of views (development tools) in the Workbench window. Each type of perspective is a combination of views, menus, and toolbars that enable you to perform a particular task. @@ -85,5 +85,6 @@ Eclipse also has perspectives that are tuned to other types of development: Red Hat Copyright Statement
 IBM Copyright Statement

+
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_proj_file_views.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_proj_file_views.htm index 164906ffb1c..c61f88c12b9 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_proj_file_views.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_proj_file_views.htm @@ -9,8 +9,8 @@ - -

Project file views

+
+

Project file views

Projects files and elements are displayed in the C/C++ Projects view and in the ProjectExplorer view.

@@ -59,7 +59,7 @@ item does, select an item and press F1.

IBM Corporation Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_projects.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_projects.htm index 5088f770ea1..2769b85ce52 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_projects.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_projects.htm @@ -8,8 +8,8 @@ - -

CDT projects

+
+

CDT projects

Before you can work in the CDT, you must create a project to store your source code, makefiles, binaries, and related files. C/C++ projects are displayed @@ -98,7 +98,7 @@ hello.c are separate files in UNIX but overwrite each other in Windows. IBM Copyright Statement - +

\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm index 703120fbc4e..4f98525d80a 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm @@ -9,8 +9,8 @@ - -

C/C++ search

+
+

C/C++ search

You can conduct a fully or partially qualified name search. Further qualifying a search increases the accuracy and relevance of search results. The @@ -269,7 +269,7 @@ your last search.

C/C++ perspective icons

IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_templates.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_templates.htm index e1c9c889062..a7fe1c6e8ca 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_templates.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_templates.htm @@ -8,8 +8,8 @@ - -

Templates

+
+

Templates

Templates are sections of code that occur frequently enough that you would like to be able to insert them with a few keystrokes. @@ -43,6 +43,6 @@ The templates that begin with that character appear. Double-click on a template Red Hat Copyright Statement
 IBM Copyright Statement

- +
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_views.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_views.htm index a9301bd3823..ff773014b6c 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_views.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_views.htm @@ -9,7 +9,8 @@ -

Views in the C/C++ perspective

+
+

Views in the C/C++ perspective

The C/C++ views are panels that help you perform the tasks involved in creating C/C++ programs. The C/C++ perspective displays these panels in a single Eclipse window.

@@ -48,6 +49,7 @@ The C/C++ perspective displays these panels Red Hat Copyright Statement
 IBM Copyright Statement

+
\ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm index 0138c88a688..a46e6c19c7c 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm @@ -9,7 +9,8 @@ -

CDT 8.1 - New and Noteworthy

+
+

CDT 8.1 - New and Noteworthy

See What's new in CDT 8.1 on the CDT Wiki which may contain more recent information.

@@ -166,7 +167,7 @@

Image:VisualizerSnapshot.png

Note that the Multicore Visualizer will only work using a Linux target; it will not work debugging on a Windows or Mac target. This is a current limitation of GDB which does not provide information about cores, for those targets (at writing, GDB is at version 7.4).

This feature was completed on February 10th, 2012. For details see Bug 335027 -

The Multicore Visualizer is an optional feature of the CDT and must be installed manually. The feature is called "C/C++ Multicore Visualizer". Installing it will install both the Multicore Visualizer and the Visualizer Framework. If you only want to install the Visualizer Framework (to build your own visualizer), you can install that feature by itself; it is called "CDT Visualizer Framework". Once the features are installed, you can access the Multicore Visualizer (or any other visualizer) by opening the view called "Visualizer". +

The Multicore Visualizer is an optional feature of the CDT and must be installed manually. The feature is called C/C++ Multicore Visualizer. Installing it will install both the Multicore Visualizer and the Visualizer Framework. If you only want to install the Visualizer Framework (to build your own visualizer), you can install that feature by itself; it is called CDT Visualizer Framework. Once the features are installed, you can access the Multicore Visualizer (or any other visualizer) by opening the view called Visualizer.

Partitioning of large arrays

CDT now displays large arrays as collections of partitions. @@ -248,8 +249,9 @@

  • If both thread(s) and process(es) are selected, and the resume/suspend operation is triggered, each selected process will be resumed/suspended, and each selected thread which is not part of any selected process will be resumed/suspended. The idea is that if a process is being resumed/suspended, each of its threads will be automatically resumed/suspended, and therefore, should not be resumed/suspended a second time because it is also selected.
  • As hinted above, CDT takes a permissive approach to multi-select resume/suspend. This means that if a multi-selection includes both stopped and running threads, a resume operation is still allowed, and only the suspended threads will be resumed; similarly, on such a multi-selection, a suspend operation is allowed, and only the running threads will be suspended. -

    Example -

    Image:MultiSelectRunControl.png +

    +

    Example

    +

    Image:MultiSelectRunControl.png

    In the above screenshot if the user were to press the Resume button with the current multi-selection the following would happen:

    1. The Consumer process node is selected, therefore the entire process will be resumed. This means that the suspended threads 7 and 9 will be resumed, while threads 6, 8 and 10 will be ignored, as they are already running. @@ -392,6 +394,6 @@ CDT 8.1 bug fixes

      Back to Top

       

      - +
    diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_60.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_60.htm index 7b3971d6ce9..e90d4300006 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_60.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_60.htm @@ -14,8 +14,8 @@ tr {vertical-align: top;} CDT 6.0 New and Noteworthy - -

    CDT 6.0 - New and Noteworthy

    +
    +

    CDT 6.0 - New and Noteworthy

    Note: "New and Noteworthy" for previous versions is at the bottom of this file.

    See What's new in CDT 6.0 on the CDT wiki; may contain other information. @@ -460,7 +460,7 @@ See What's New in CDT 5.0

    CDT 6.0 - New and Noteworthy

    CDT 5.0 - New and Noteworthy

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_70.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_70.htm index f00abe79b3a..0a6852755ee 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_70.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_70.htm @@ -14,8 +14,8 @@ tr {vertical-align: top;} CDT 7.0 New and Noteworthy - -

    CDT 7.0 - New and Noteworthy

    +
    +

    CDT 7.0 - New and Noteworthy

    See What's new in CDT 7.0 on the CDT wiki which may contain more recent information.

    @@ -344,7 +344,7 @@ which may contain more recent information.

    Back to Top

     

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_80.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_80.htm index 0ff1521945f..2aaf44afac1 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_80.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew_80.htm @@ -14,8 +14,8 @@ tr {vertical-align: top;} CDT 8.0 New and Noteworthy - -

    CDT 8.0 - New and Noteworthy

    +
    +

    CDT 8.0 - New and Noteworthy

    See What's new in CDT 8.0 on the CDT Wiki which may contain more recent information.

    @@ -550,7 +550,7 @@ end

    Back to Top

     

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_build_conc.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_build_conc.htm index 572034835f0..c170436a50b 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_build_conc.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_build_conc.htm @@ -9,14 +9,15 @@ - -

    Build

    +
    +

    Build

    This section describes the build views and terminology.

    Building C/C++ Projects

    IBM Copyright Statement

    +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_code_entry.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_code_entry.htm index edfbe1fcc24..d3b80448f14 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_code_entry.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_code_entry.htm @@ -9,8 +9,8 @@ - -

    Coding aids

    +
    +

    Coding aids

    This section provides information on code entry aids.

    Comments
    @@ -18,6 +18,6 @@ Templates

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_concepts.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_concepts.htm index 888cc208407..67696fbb174 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_concepts.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_concepts.htm @@ -9,8 +9,8 @@ - -

    Concepts

    +
    +

    Concepts

    Provides background information for CDT components, tasks and objectives.

    @@ -54,6 +54,7 @@ C/C++ Indexer Progress Bar

    IBM Corporation Statement

    +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_dbg_concepts.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_dbg_concepts.htm index 31836ceed8a..3259ac0acd5 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_dbg_concepts.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_dbg_concepts.htm @@ -9,8 +9,8 @@ - -

    Debug

    +
    +

    Debug

    This section describes CDT debug concepts.

    Breakpoints
    @@ -18,6 +18,6 @@ Debug information

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_edit.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_edit.htm index 74b1aa0d6d6..fc22a9fed55 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_edit.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_edit.htm @@ -9,13 +9,13 @@ - -

    Editing C/C++ Files

    +
    +

    Editing C/C++ Files

    This section provides information on editing C/C++ files.

    C/C++ editor
    Makefile

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_home.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_home.htm index d4d85b27755..ea5e422bc4d 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_home.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_home.htm @@ -8,8 +8,8 @@ - -

    C/C++ Development User Guide

    +
    +

    C/C++ Development User Guide

    The C/C++ Development Toolkit (CDT) is a collection of Eclipse-based features that provides the capability to create, edit, navigate, build, and debug projects that use C and/or C++ as a programming language.

    @@ -31,6 +31,6 @@ not, the base CDT does provide support for integration with the GNU tools for bu Reference

    What's new
    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_nav.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_nav.htm index d7099d39d31..7d02f027365 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_nav.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_o_nav.htm @@ -9,8 +9,8 @@ - -

    Navigation Aids

    +
    +

    Navigation Aids

    This section provides information on navigating through the C/C++ Perspective.

    Outline View
    Project File views
    @@ -24,6 +24,6 @@ Make Targets View
    -->

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_o_tutorial.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_o_tutorial.htm index b4604a5faec..e56c2d384de 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_o_tutorial.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_o_tutorial.htm @@ -7,7 +7,8 @@ -

    Getting Started

    +
    +

    Getting Started

    The following tutorials guide you through the process of using the C/C++ Development Toolkit (CDT) to:

    @@ -42,6 +43,7 @@ CDT Home

    QNX Software Systems Copyright Statement

    +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_basic.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_basic.htm index 0ff6ed3bb5d..9db5c363982 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_basic.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_basic.htm @@ -13,7 +13,7 @@ function newWin(url) { --> -

    Tutorial: Creating a simple application

    +

    Tutorial: Creating a simple application

    In this tutorial, you will use the CDT to create a simple 'Hello World' application. This tutorial describes the process of creating a new C++ project where the build is @@ -162,5 +162,5 @@ The Console also shows which application is running in a title


    QNX Software Systems Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_build.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_build.htm index e29e21fc1be..dde9e59c20c 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_build.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_build.htm @@ -14,7 +14,7 @@ function newWin(url) { --> -

    Building a project

    +

    Building a project

    The make output and build progress information displays in the Console view. The Make Targets view displays makefile actions, and the @@ -61,5 +61,5 @@ C/C++ Properties window
    href="cdt_w_newmake.htm">Back: Creating a makefile

    QNX Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_debug.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_debug.htm index 0cfecec6297..998b070f848 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_debug.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_debug.htm @@ -10,7 +10,7 @@ -

    Debugging a project

    +

    Debugging a project

    The debugger lets you control the execution of your program by setting breakpoints, suspending executed programs, stepping through your code, and @@ -69,7 +69,7 @@ examining the contents of variables.

  • In the left margin of the main.cpp window, double-click to set a breakpoint on:

    -  cout << "You just entered" +  cout << You just entered

    You'll see a blue circle (Breakpoint) there indicating the breakpoint is set.
    @@ -127,6 +127,6 @@ examining the contents of variables.

     

    QNX Copyright Statement - +

  • \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_existing_code.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_existing_code.htm index 8cf61e38716..ca040c2624a 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_existing_code.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_existing_code.htm @@ -9,7 +9,7 @@ -

    Importing your C/C++ source files into Eclipse

    +

    Importing your C/C++ source files into Eclipse

    Using the CVS Repository Exploring perspective, you can check out modules or directories into existing projects, or create new @@ -206,6 +206,6 @@ appropriate "root folder" to import from.

    QNX Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_import.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_import.htm index 06da44a03f6..5afd41bd604 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_import.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_import.htm @@ -13,7 +13,7 @@ function newWin(url) { -

    Tutorial: Importing an existing project

    +

    Tutorial: Importing an existing project

    The following tutorial takes you though the process of importing a 'legacy' application using the CDT.

    @@ -86,7 +86,7 @@ function newWin(url) {
    • Open the project properties (right mouse on project name in the Project Explorer view and select Properties at the bottom on the context menu).
    • -
    • On the C/C++ Build Page, on its Builder Settings tab, uncheck "Use default build command" +
    • On the C/C++ Build Page, on its Builder Settings tab, uncheck Use default build command and change the make command to make -f hello.mak since our makefile is not named the default makefile.

      Click @@ -132,7 +132,7 @@ name, hello.e because that's what our makefile hello.makClick here to see an illustration (displayed in a separate window).

        -
      • If you see the error "[Debugger]: No debugger available", select the Debugger tab +
      • If you see the error [Debugger]: No debugger available, select the Debugger tab and choose a valid debugger for your platform (e.g. gdb/mi).
      @@ -144,5 +144,5 @@ name, hello.e because that's what our makefile hello.makThe application runs in the Console view. The Console also shows which application it is currently running in the title bar. You can configure the view to display different elements, such as user input elements using different colors.

      QNX Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_install_cdt.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_install_cdt.htm index 9eb9c82ed27..d8a575c4c7d 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_install_cdt.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_install_cdt.htm @@ -25,7 +25,7 @@ function newWin(url) { -

    Installing and updating the CDT

    +

    Installing and updating the CDT

    You can use the Software Updates manager to quickly install or update the CDT directly from the Eclipse workbench using your internet connection.

    @@ -82,6 +82,6 @@ function newWin(url) { QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newcpp.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newcpp.htm index 681baa8e4f0..0f980701660 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newcpp.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newcpp.htm @@ -10,7 +10,7 @@ -

    Creating your C++ file

    +

    Creating your C++ file

    You can begin coding your HelloWorld program. The .cpp file that you create will be saved in the project folder you just created @@ -34,7 +34,7 @@ bar, displays icons for items such as bookmarks, breakpoints, and compiler erro folder, and select New > Source File.

  • In the Source file: field, type main.cpp.
    By default the source folder should be your project folder. -
    The template selected is probably "Default C/C++ Source Template." +
    The template selected is probably Default C/C++ Source Template.
  • Click Finish.
  • A Comment template probably appears at the top of an otherwise empty file. @@ -48,13 +48,13 @@ using namespace std; int main () { // Say Hello five times for (int index = 0; index < 5; ++index) - cout << "HelloWorld!" << endl; + cout << HelloWorld! << endl; char input = 'i'; - cout << "To exit, press 'm'" << endl; + cout << To exit, press 'm' << endl; while(input != 'm') { cin >> input; - cout << "You just entered " << input - << " you need to enter m to exit." << endl; + cout << You just entered << input + << you need to enter m to exit. << endl; } exit(0); } @@ -91,6 +91,6 @@ can build your HelloWorld project, you must create a makefile.

    IBM Copyright Statement - +

  • diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newmake.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newmake.htm index 0841251c4cf..927698d91b7 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newmake.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newmake.htm @@ -15,7 +15,7 @@ function newWin(url) { -

    Creating a makefile

    +

    Creating a makefile

    For the purpose of this tutorial, you were instructed to create a C++ Project which requires you to create a makefile.

    @@ -78,6 +78,6 @@ contains main.cpp and makefile. You can now build your HelloWorld project.

    IBM Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newproj.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newproj.htm index cfe4829423b..48dec435d7d 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newproj.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_newproj.htm @@ -13,7 +13,7 @@ function newWin(url) { -

    Creating a Makefile project

    +

    Creating a Makefile project

    This tutorial describes the process of creating a new C++ project that includes a makefile, and debugging the program.

    @@ -116,5 +116,5 @@ href="../reference/cdt_o_proj_prop_pages.htm">C/C++ Projects view

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_prepare_workbench.htm b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_prepare_workbench.htm index 01be64da5b3..cb38ccad617 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_prepare_workbench.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/cdt_w_prepare_workbench.htm @@ -15,7 +15,7 @@ function newWin(url) { -

    Preparing the Workbench

    +

    Preparing the Workbench

    This tutorial will get you started using the C/C++ Development Toolkit (CDT) in the Workbench.

    First, you will verify that the workbench is properly configured for C/C++ development. It is assumed that:

    @@ -67,5 +67,5 @@ To reset the current perspective to its original layout, from the menu bar selec

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/hw_example.htm b/doc/org.eclipse.cdt.doc.user/getting_started/hw_example.htm index 4dc9597f92d..f5abc5c17bd 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/hw_example.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/hw_example.htm @@ -6,7 +6,8 @@ C++ Hello World example -

    Copy the code below and paste it into the main.cpp file in the Editor view:

    +
    +Copy the code below and paste it into the main.cpp file in the Editor view:

     #include <iostream>
    @@ -26,5 +27,5 @@ int main()
     
     
    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/getting_started/make_example.htm b/doc/org.eclipse.cdt.doc.user/getting_started/make_example.htm index bfb6452b470..86a51a138a0 100644 --- a/doc/org.eclipse.cdt.doc.user/getting_started/make_example.htm +++ b/doc/org.eclipse.cdt.doc.user/getting_started/make_example.htm @@ -6,7 +6,8 @@ C++ Makefile example -

    Copy the script below and paste it into the makefile file in the Editor view:

    +
    +

    Copy the script below and paste it into the makefile file in the Editor view:

     all: hello
    @@ -22,5 +23,5 @@ main.o: main.cpp
     
     
    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/notices.html b/doc/org.eclipse.cdt.doc.user/notices.html index 03889381610..af4b9ab03cd 100644 --- a/doc/org.eclipse.cdt.doc.user/notices.html +++ b/doc/org.eclipse.cdt.doc.user/notices.html @@ -8,7 +8,8 @@ Legal Notices -

    +
    +

    Notices

    The material in this guide is Copyright (c) IBM Corporation and others @@ -18,5 +19,6 @@ The material in this guide is Copyright (c) IBM Corporation and others Terms and conditions regarding the use of this guide.

    +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ceditor_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ceditor_pref.htm index d439040fa1b..7606aa07820 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ceditor_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ceditor_pref.htm @@ -10,7 +10,7 @@ -

    C/C++ editor preferences

    +

    C/C++ editor preferences

    This section describes how to set preferences for the C/C++ editor.

    @@ -29,5 +29,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_dbg_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_dbg_view.htm index 15f079afc08..dcfda0acf28 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_dbg_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_dbg_view.htm @@ -10,7 +10,7 @@ -

    Debug views

    +

    Debug views

    This section describes debug views.

    @@ -25,6 +25,6 @@

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_menu.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_menu.htm index 25c86453bc8..18cf71e4c7f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_menu.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_menu.htm @@ -9,7 +9,7 @@ -

    C/C++ Menubar

    +

    C/C++ Menubar

    This section describes the menubar options available from the C/C++ perspective.

    CDT main menu @@ -32,5 +32,5 @@ alt="CDT main menu"> Window Menu actions

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref.htm index 13229e69e2b..2f6f6ebd98e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref.htm @@ -10,7 +10,7 @@ -

    Managed Make Project preferences

    +

    Managed Make Project preferences

    Customizes the managed make project settings for the entire workspace.

    @@ -25,5 +25,5 @@ entire workspace.

    Settings

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref_macro.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref_macro.htm index 5978b031e29..10d80c4d2c1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref_macro.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_mproj_pref_macro.htm @@ -10,7 +10,7 @@ -

    Managed Make Project preferences, Build Macros

    +

    Managed Make Project preferences, Build Macros

    Customizes the build macros for all managed make projects in the workspace.

    Managed Build Macros Preference page

    @@ -37,5 +37,5 @@ Project Properties, Managed, C/C++ Build, Macros

    Managed Build Project preferences, Environment

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_mproj.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_mproj.htm index 775f2f423c1..893fe8ede21 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_mproj.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_mproj.htm @@ -10,7 +10,7 @@ -

    C/C++ New Project Wizard, Managed Make Project

    +

    C/C++ New Project Wizard, Managed Make Project

    This section describes properties for creating a Managed make project in the C/C++ New Project Wizard.

    Name
    Select a @@ -21,5 +21,5 @@ Project Type

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_sproj.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_sproj.htm index f6816658376..4f6d95f3b21 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_sproj.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_new_sproj.htm @@ -10,7 +10,7 @@ -

    C/C++ New Project Wizard, Standard Make Project

    +

    C/C++ New Project Wizard, Standard Make Project

    This section describes properties for creating a Standard make project in the C/C++ New Project Wizard.

    Name
    Referenced Projects
    @@ -22,5 +22,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_proj_prop_pages.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_proj_prop_pages.htm index 6ed1fda8c69..c9950c52934 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_proj_prop_pages.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_proj_prop_pages.htm @@ -10,7 +10,7 @@ -

    New CDT Project Wizard

    +

    New CDT Project Wizard

    In this section, learn about the C/C++ New CDT Project Wizard.

    New CDT Project Wizard preferences
    @@ -23,5 +23,5 @@

    Nokia Copyright Statement
    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_file.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_file.htm index 24738825642..f2546bb3592 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_file.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_file.htm @@ -10,7 +10,7 @@ -

    C/C++ File Properties

    +

    C/C++ File Properties

    This section describes properties for a Source Files in CDT project

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_folder.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_folder.htm index 5e78a2538c0..61a608335c5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_folder.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_folder.htm @@ -10,7 +10,7 @@ -

    C/C++ Folder Properties

    +

    C/C++ Folder Properties

    This section describes properties for a CDT project Folder

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_proj.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_proj.htm index 1f7f08e3a47..07d61f51a60 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_proj.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_prop_proj.htm @@ -10,7 +10,7 @@ -

    Project Properties

    +

    Project Properties

    This section describes C/C++ Project Properties. To select project properties, right click a project and select Properties.

    @@ -76,5 +76,5 @@ To select project properties, right click a project and select Propertie

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ref.htm index 749ffa3c5ed..a0b8005d768 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_ref.htm @@ -9,7 +9,7 @@ -

    Reference

    +

    Reference

    This section describes the Views, Windows, Dialog Boxes, and Preference Panels available from the C/C++ perspective.

    C/C++ Views and Editors
    @@ -111,5 +111,5 @@ Nokia Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_run_dbg_pages.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_run_dbg_pages.htm index de31bae42ab..0e0ce4ac300 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_run_dbg_pages.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_run_dbg_pages.htm @@ -10,7 +10,7 @@ -

    Run and Debug

    +

    Run and Debug

    Types of Launch configurations supported by CDT

    C/C++ Local Application - run application on local host
    @@ -27,5 +27,5 @@

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_views.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_views.htm index b2bbe1d9765..c831898a898 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_o_views.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_o_views.htm @@ -10,7 +10,7 @@ -

    C/C++ Views and Editors

    +

    C/C++ Views and Editors

    This section describes views and editors of the C/C++ perspective.

    Selecting Views and Editors
    @@ -41,5 +41,5 @@

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_appearance_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_appearance_pref.htm index 7ae389775f2..d91759b2631 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_appearance_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_appearance_pref.htm @@ -11,7 +11,7 @@ -

    Appearance preferences

    +

    Appearance preferences

    Use the Appearance panel of the Preferences window to customize the appearance of C elements in the viewers. Click Window > Preferences > C/C++ > Appearance to open.

    Appearance Preference

    @@ -69,6 +69,6 @@

    Nokia Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_style_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_style_pref.htm index 8becabb4803..ce3bf383019 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_style_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_style_pref.htm @@ -10,7 +10,7 @@ -

    Code Style preferences

    +

    Code Style preferences

    Use the Code Style preference panel to configure your global code style profiles for smart typing features, like auto-indentation and formatting. Click Window > Preferences > C/C++ > Code Style to make changes.

    Code Style Preferences

    @@ -80,6 +80,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_templates_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_templates_pref.htm index 5235c658260..7172549b879 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_templates_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_code_templates_pref.htm @@ -10,7 +10,7 @@ -

    +

    Code templates

    The @@ -323,5 +323,5 @@ The New File from Template wizard can be used to create new files based on one o C/C++ editor preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_color.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_color.htm index 349e3454fd1..22f42c5b90e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_color.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_color.htm @@ -11,7 +11,7 @@ -

    Syntax Coloring preferences

    +

    Syntax Coloring preferences

    Use the Syntax Coloring preference panel to specify how C/C++ source code is rendered. Each element category (Code, Comments, and Preprocessor) contains a list of language elements that may be rendered with its own color and style.

    Note that general text editor settings such as the background color can be configured on the general Text Editors preference pages. Fonts may be configured on the general Colors and Fonts preference page

    @@ -72,6 +72,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist.htm index 993e6d26ebf..5c78ca61823 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist.htm @@ -10,7 +10,7 @@ -

    Content Assist preferences

    +

    Content Assist preferences

    Use the Content Assist panel to customize the Content Assist feature in C/C++ editors.

    Content Assist Preferences Dialog Box

    @@ -72,6 +72,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist_adv.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist_adv.htm index 20314995e58..de97d0b9307 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist_adv.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_con_assist_adv.htm @@ -10,7 +10,7 @@ -

    Advanced preferences

    +

    Advanced preferences

    Use the Advanced panel in the Preferences window to configure the behavior of the Content Assist (Ctrl+Space) command.

    Content Assist Preferences Dialog Box

    @@ -65,6 +65,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_folding.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_folding.htm index d43ae6ff49f..8ca3d5755d2 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_folding.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_folding.htm @@ -10,7 +10,7 @@ -

    Folding preferences

    +

    Folding preferences

    Use the Folding preference panel to customize the C/C++ editor folding behavior.

    Editor Folding Preferences Window

    @@ -95,6 +95,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_gen.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_gen.htm index 9dcb520d7b6..bc4e3f6f780 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_gen.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_gen.htm @@ -10,7 +10,7 @@ -

    Editor preferences

    +

    Editor preferences

    Use the Editor preference panel to control the appearance of text highlighting in C/C++ editors.

    Editor Preferences Panel

    @@ -67,6 +67,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_hov.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_hov.htm index 1e306889336..1497669e64f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_hov.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_hov.htm @@ -10,7 +10,7 @@ -

    Hovers preferences

    +

    Hovers preferences

    Use the Hovers preference panel to customize the C/C++ editor hover behavior.

    Editor Hover Preferences Panel

    @@ -59,6 +59,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_mark_occurrences.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_mark_occurrences.htm index bce0bca2779..3323d3dbb9f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_mark_occurrences.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_mark_occurrences.htm @@ -9,7 +9,7 @@ -

    Mark Occurrences preferences

    +

    Mark Occurrences preferences

    Use the Mark Occurrences preference panel to set annotations for the C/C++ Editor view.

    Mark Occurrences Preference Panel

    @@ -57,5 +57,5 @@
    C/C++ editor preferences

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_save_actions.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_save_actions.htm index 6eca520e957..04483eaec55 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_save_actions.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_save_actions.htm @@ -10,7 +10,7 @@ -

    Save actions

    +

    Save actions

    Use the Save Actions preference panel to configure actions performed by the C/C++ editor while saving a file.

    Save Actions Preferences

    @@ -52,6 +52,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_scalability.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_scalability.htm index b0272dc0288..bd2fb26d32c 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_scalability.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_scalability.htm @@ -10,7 +10,7 @@ -

    Scalability preferences

    +

    Scalability preferences

    Use the Scalability preference panel to configure options for dealing with large source files.

    Scalability Preferences

    @@ -78,6 +78,6 @@ Code Style preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_typing.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_typing.htm index 07c2aa75e7c..4ffc6217287 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_typing.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_editor_typing.htm @@ -10,7 +10,7 @@ -

    Typing preferences

    +

    Typing preferences

    Use the Typing preference panel to assist in formatting input as you type.

    Typing Preferences

    @@ -80,6 +80,6 @@ Code Style preferences

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_file_types.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_file_types.htm index beb50cc2c79..eedccb3ae1f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_file_types.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_file_types.htm @@ -10,7 +10,7 @@ -

    File Types preference (C/C++)

    +

    File Types preference (C/C++)

    Use the File Types preference panel to define which file extensions are linked to specific languages.

    File Types Preference Panel

    @@ -47,6 +47,6 @@ C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_pref.htm index 6d682b68236..005234b3f0a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_c_pref.htm @@ -10,7 +10,7 @@ -

    C/C++ preferences

    +

    C/C++ preferences

    The C/C++ preference panel allows you to make changes to your C/C++ environment. Click Window > Preferences > C/C++ to view.

    C/C++ Main Preferences Window

    @@ -54,6 +54,6 @@ Views

    Intel Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_call_hierarchy_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_call_hierarchy_view.htm index 72ac6f8f195..4246b9787cb 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_call_hierarchy_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_call_hierarchy_view.htm @@ -10,7 +10,7 @@ -

    Call Hierarchy view

    +

    Call Hierarchy view

    The Call Hierarchy view shows the loaded callers and callees for a selected C/C++ function. Right-click a function name in a source file and select Open Call Hierarchy to open a Call Hierarchy view, if none is open, and show the function's callers.

    @@ -115,6 +115,6 @@ Views


    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_code_temp.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_code_temp.htm index 327b7f707b6..a5c448fea02 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_code_temp.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_code_temp.htm @@ -10,7 +10,7 @@ -

    Templates preferences

    +

    Templates preferences

    Use the Templates preference panel to manipulate any of the common templates predefined within CDT or create your own. To modify, delete, export, import, or create your own templates click Window > Preferences > C/C++ > Templates.

    @@ -74,6 +74,6 @@ import, or create your own templates click Window > Preferences > C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_pref.htm index 7490d39cc26..6ed08182645 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_pref.htm @@ -11,7 +11,7 @@ -

    Console preferences

    +

    Console preferences

    Use the Console preference panel to customize the appearance of messages that appear in the Console view.

    Console Preferences Panel

    @@ -88,6 +88,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_view.htm index f93e0060619..d601d90e68b 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_console_view.htm @@ -9,7 +9,7 @@ -

    Console view

    +

    Console view

    The Console view displays the output of a process and allows you to provide keyboard input to a process. There are numerous consoles available, see the Open Console dropdown list for those available to you.

    Console View

    @@ -149,5 +149,5 @@ you see one or more of the following options in a context menu depending on the Red Hat Copyright Statement
    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_cproj_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_cproj_view.htm index efb83cf0cca..161d8db37cb 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_cproj_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_cproj_view.htm @@ -10,7 +10,7 @@ -

    C/C++ Projects view

    +

    C/C++ Projects view

    Note: This view is not supported anymore. It is recommended to use the Project Explorer view.

    The C/C++ Project view displays, in a tree structure, only elements relevant to C and C++ project files, similar to the Project Explorer view. In this view you can do the following: @@ -243,5 +243,5 @@ This view is not supported anymore. It is recommended to use the

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_create_make_target.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_create_make_target.htm index 1b62ebd1acb..db8623f83be 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_create_make_target.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_create_make_target.htm @@ -9,7 +9,7 @@ -

    Create a Make Target

    +

    Create a Make Target

    Use the Create a Make Target dialog box to define build settings when creating a Make Target.

    @@ -65,6 +65,6 @@ IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_breadcrumb.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_breadcrumb.htm index 3af5ca9e8ae..f5e7addcbd6 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_breadcrumb.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_breadcrumb.htm @@ -8,7 +8,7 @@ -

    Debug Breadcrumb

    +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_brkpt_actions.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_brkpt_actions.htm index 1273d8a39b5..944c102afe2 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_brkpt_actions.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_brkpt_actions.htm @@ -10,7 +10,7 @@ -

    Breakpoint Actions preferences

    +

    Breakpoint Actions preferences

    Use the Breakpoint Actions page in the Preferences window to create, edit, and remove breakpoint actions. The breakpoint actions defined here are available to all projects in the current workspace.

    Breakpoint Actions preference page

    @@ -50,6 +50,6 @@
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm index de013804f14..308a788d9db 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm @@ -9,7 +9,7 @@ -

    Debug preferences

    +

    Debug preferences

    The C/C++ Debug panel controls general settings for C/C++ debugging.

    C/C++ Debug preferences panel

    @@ -62,6 +62,6 @@ Views

    Nokia Copyright Statement
    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_src.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_src.htm index dbf2329503b..a6e5346907a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_src.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_src.htm @@ -10,7 +10,7 @@ -

    Source Lookup Path preference

    +

    Source Lookup Path preference

    Use the Source Lookup Path preference page to add or remove source containers.

    @@ -66,6 +66,6 @@

    Nokia Copyright Statement
    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_view.htm index 621605e0671..9b0eabb53c0 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_view.htm @@ -11,7 +11,7 @@ -

    Debug view

    +

    Debug view

    The Debug view shows the target debugging information in a tree hierarchy.

    Debug view

    @@ -333,6 +333,6 @@ debugging attached processes). Nokia Copyright Statement
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_debug.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_debug.htm index df0f3b6e848..7fbad746f99 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_debug.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_debug.htm @@ -10,7 +10,7 @@ -

    Debug preferences

    +

    Debug preferences

    Use the Debug preference panel in the Preferences window to manage common globally defined debug settings.

    Debug Preferences @@ -63,5 +63,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_discovery_preferences.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_discovery_preferences.htm index 92411733d6b..8e44c338ed3 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_discovery_preferences.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_discovery_preferences.htm @@ -9,7 +9,7 @@ -

    Discovery Options page, C/C++ Preferences window

    +

    Discovery Options page, C/C++ Preferences window

    You can define the discovery options on the Discovery Options page of a C/C++ Preferences window.

    @@ -30,6 +30,6 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dissassembly_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dissassembly_view.htm index 4cc2773ac5e..9939e553839 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dissassembly_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dissassembly_view.htm @@ -10,7 +10,7 @@ -

    Disassembly view

    +

    Disassembly view

    The Disassembly view shows the loaded program as assembler instructions mixed with source code for comparison. The currently executing line is indicated by an arrow marker and highlighted in the view. You can do the following tasks in the Disassembly view:

    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm index bad7c2b0e2f..cf041783ff3 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dsfgdb.htm @@ -10,7 +10,7 @@ -

    GDB Debugging Preferences

    +

    GDB Debugging Preferences

    Use this preferences panel to control how the CDT debugger behaves when debugging with GDB, specifically when using a GDB (DSF) launcher. @@ -138,6 +138,6 @@ specifically when using a GDB (DSF) launcher.


    IBM Copyright Statement

    - +
    - \ No newline at end of file + diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_editor_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_editor_view.htm index 73263253d65..9ba6e6a9027 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_editor_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_editor_view.htm @@ -9,7 +9,7 @@ -

    Editor view

    +

    Editor view

    The C/C++ editor provides specialized features for editing C/C++ related files.

    C/C++ Editor

    Associated with the editor is a C/C++-specific Outline view, @@ -34,6 +34,6 @@ and key binding actions.

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_environment_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_environment_pref.htm index 93e6d4e482b..e136a355b13 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_environment_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_environment_pref.htm @@ -11,7 +11,7 @@ -

    Environment preferences

    +

    Environment preferences

    Use the Environment preference panel to define environment variables and their use.

    Environment Preference

    @@ -65,6 +65,6 @@

    Nokia Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_discovery.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_discovery.htm index 48c38725e58..1c31cec923e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_discovery.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_discovery.htm @@ -7,7 +7,7 @@ -

    C/C++ File Properties, Discovery Options

    +

    C/C++ File Properties, Discovery Options

    Use the Discovery Options property panel to define the discovery option properties of a C/C++ file's.

    @@ -125,5 +125,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_inc.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_inc.htm index c15d6e5f16a..0cbc6ee74cd 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_inc.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_inc.htm @@ -9,7 +9,7 @@ -

    C/C++ File Properties, Paths and Symbols, Includes

    +

    C/C++ File Properties, Paths and Symbols, Includes

    Use the Paths and Symbols properties panel Includes tab to modify the list of included paths and change the order in which they are referenced.

    C/C++ File Properties, Paths and Symbols, Includes

    @@ -105,6 +105,6 @@

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lang_mapp.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lang_mapp.htm index faaedfdf111..950e1ce217c 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lang_mapp.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lang_mapp.htm @@ -10,7 +10,7 @@ -

    Language Mappings preferences

    +

    Language Mappings preferences

    Use the Language Mappings properties panel to customize the use of C/C++ language associations for the file.

    Language Mappings preference page

    @@ -52,6 +52,6 @@

    Nokia Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lng.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lng.htm index eb4d794bb7d..3b2b06bd6b1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lng.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_lng.htm @@ -7,7 +7,7 @@ -

    C/C++ File Properties, Language mappings

    +

    C/C++ File Properties, Language mappings

    Customize the use of C/C++ language associations in the Language Mappings preference panel for individual files.

    C/C++ Project Properties, Language mapping

    @@ -34,5 +34,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_steps.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_steps.htm index 0c6c80302e6..76290364f82 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_steps.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_steps.htm @@ -7,7 +7,7 @@ -

    C/C++ File Properties, Build, Settings, Build Steps tab

    +

    C/C++ File Properties, Build, Settings, Build Steps tab

    Use the Build Steps properties panel to customize the selected build configuration allowing the specification of user defined build command steps, as well as a descriptive message to be displayed in the build output, immediately prior to and immediately after normal build processing executes. @@ -80,5 +80,5 @@ build output, immediately prior to and immediately after normal build processing

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_sym.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_sym.htm index 63d8e8a10ca..3b089bed81d 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_sym.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_sym.htm @@ -9,7 +9,7 @@ -

    C/C++ File Properties, Paths and Symbols, Symbols

    +

    C/C++ File Properties, Paths and Symbols, Symbols

    Use the Paths and Symbols properties panel # Symbols tab to modify the list of preprocessor symbols.

    C/C++ File Properties, Paths and Symbols, Symbols

    @@ -99,6 +99,6 @@

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_toolsettings.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_toolsettings.htm index da159460849..7beb016d754 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_toolsettings.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fileprop_toolsettings.htm @@ -7,7 +7,7 @@ -

    C/C++ File Properties, Build, Settings, Tool settings tab

    +

    C/C++ File Properties, Build, Settings, Tool settings tab

    Customizes the tools and tool options used in your build configuration.

    C/C++ File Properties, Build, Settings, Tool Settings tab

    @@ -106,5 +106,5 @@ Customizes the tools and tool options used in your build configuration.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_find_replace.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_find_replace.htm index 725820aa63e..382b6d017e5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_find_replace.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_find_replace.htm @@ -7,7 +7,7 @@ C/C++ Find/Replace -

    C/C++ Find/Replace

    +

    C/C++ Find/Replace

    Ctrl+F (or Edit > Find/Replace) displays the Find/Replace dialog. Here you can specify text to search for and optionally text with which to replace it.

    @@ -54,5 +54,5 @@ of incremental find in the Status Line.

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_discovery.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_discovery.htm index cef94f6d29d..19954c90c84 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_discovery.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_discovery.htm @@ -7,7 +7,7 @@ -

    C/C++ Folder Properties, Discovery Options

    +

    C/C++ Folder Properties, Discovery Options

    You can define the discovery options on the Discovery Options page of a C/C++ project's properties window.

    @@ -126,5 +126,5 @@ of a C/C++ project's properties window.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_resource.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_resource.htm index d04b42e252d..638a498617a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_resource.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_resource.htm @@ -7,7 +7,7 @@ -

    C/C++ Folder Properties, Resource

    +

    C/C++ Folder Properties, Resource

    C/C++ Folder Properties, Resource

    @@ -58,5 +58,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_toolsettings.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_toolsettings.htm index 210b968ddc6..7843918ff5e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_toolsettings.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_fprop_toolsettings.htm @@ -7,7 +7,7 @@ -

    C/C++ Folder Properties, Build, Settings, Tool settings tab

    +

    C/C++ Folder Properties, Build, Settings, Tool settings tab

    Customizes the tools and tool options used in your build configuration.

    C/C++ Folder Properties, Build, Settings, Tool settings tab

    @@ -110,5 +110,5 @@ Customizes the tools and tool options used in your build configuration.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_gdb_mi.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_gdb_mi.htm index 47cd52f3ee5..05f0e859ed1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_gdb_mi.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_gdb_mi.htm @@ -11,7 +11,7 @@ -

    Debug GDB MI page, Preferences window

    +

    Debug GDB MI page, Preferences window

    Use the GDB MI preference panel to manipulate certain GDB timeout settings.

    Debug GDB MI Preferences

    @@ -51,6 +51,6 @@ GDB Debugging preferences


    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_icons.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_icons.htm index 4915f85da61..1b4a1683a90 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_icons.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_icons.htm @@ -12,7 +12,7 @@ Provides a structural view of your code. END INFOPOP--> -

    C/C++ Icons

    +

    C/C++ Icons

    The table below lists the icons displayed in the C/C++ perspective.

    @@ -134,6 +134,6 @@ C/C++ Projects view


    Views

    IBM Copyright Statement. - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_include_browser_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_include_browser_view.htm index f193e688329..33ecf67ad38 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_include_browser_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_include_browser_view.htm @@ -8,7 +8,7 @@ -

    +

    Include Browser view

    @@ -169,5 +169,5 @@


    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_indexer_preference.html b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_indexer_preference.html index 6d104f54cf8..95fc083c56f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_indexer_preference.html +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_indexer_preference.html @@ -8,7 +8,7 @@ -

    Indexer preferences (C/C++)

    +

    Indexer preferences (C/C++)

    Use the Indexer preference panel to select the indexer used by default for new projects and configure its behavior.

    Indexer Preferences Window

    @@ -117,5 +117,5 @@ editor

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_language_mapping_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_language_mapping_pref.htm index 67b72aa973c..d9d93139c2e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_language_mapping_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_language_mapping_pref.htm @@ -11,7 +11,7 @@ -

    Language Mappings preferences

    +

    Language Mappings preferences

    Use the Language Mappings preference panel to customize the use of C/C++ language associations for the workspace.

    Language Mappings preferences

    @@ -65,6 +65,6 @@

    Nokia Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_edit.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_edit.htm index 48c3bb35ee6..2e5fe91a171 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_edit.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_edit.htm @@ -8,7 +8,7 @@ -

    Edit Menu actions

    +

    Edit Menu actions

    Selecting Edit Menu

    @@ -192,5 +192,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_file.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_file.htm index b7059223524..2ef7d4914e5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_file.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_file.htm @@ -10,7 +10,7 @@ -

    File Menu actions

    +

    File Menu actions

    Selecting File Menu

    @@ -137,5 +137,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_navigate.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_navigate.htm index 95628b33111..bad8cc190da 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_navigate.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_navigate.htm @@ -9,7 +9,7 @@ -

    Navigate Menu actions

    +

    Navigate Menu actions

    Selecting Navigate Menu

    @@ -146,5 +146,5 @@ Refer to the Java Development User Guide for details.

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_project.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_project.htm index 760cdce0079..3ee5ce890cd 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_project.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_project.htm @@ -9,7 +9,7 @@ -

    Project Menu actions

    +

    Project Menu actions

    Selecting Project Menu

    @@ -86,5 +86,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_refactor.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_refactor.htm index af9c8eeb6c0..f9046de7912 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_refactor.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_refactor.htm @@ -9,7 +9,7 @@ -

    Refactor Menu actions

    +

    Refactor Menu actions

    Selecting Refactor Menu

    @@ -26,5 +26,5 @@

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_run.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_run.htm index 614672e5b20..8bb92c2fecb 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_run.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_run.htm @@ -10,7 +10,7 @@ -

    Run Menu actions

    +

    Run Menu actions

    Run Menu

    @@ -75,5 +75,5 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_search.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_search.htm index ec109c8c366..c9fac4ae3ec 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_search.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_search.htm @@ -8,7 +8,7 @@ -

    Search Menu actions

    +

    Search Menu actions

    Search menu commands open the search dialog. There are specialized tabs on the general Search dialog to help you search for:

    • Files, or for text in files
    • @@ -64,5 +64,5 @@

      IBM Copyright Statement

      - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_window.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_window.htm index 0042ff84b13..00118d4304c 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_window.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_m_window.htm @@ -8,7 +8,7 @@ -

    Window Menu actions

    +

    Window Menu actions

    Window Menu

    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_pref.htm index 7a29bb38036..6ca13f56343 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_pref.htm @@ -11,7 +11,7 @@ -

    Make Targets preferences

    +

    Make Targets preferences

    Use the Make Targets preference panel in the Preferences window to set make target options.

    @@ -68,6 +68,6 @@

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_settings_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_settings_pref.htm index 9288da3666a..aa6b95aae94 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_settings_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_settings_pref.htm @@ -11,7 +11,7 @@ -

    Settings preferences

    +

    Settings preferences

    Use the Settings preference panel in the Preferences window to specify the Makefile style and include directories.

    @@ -66,6 +66,6 @@
    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_targets_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_targets_view.htm index 0d3cf783e6f..b817fca4628 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_targets_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_make_targets_view.htm @@ -10,7 +10,7 @@ -

    Make Targets view

    +

    Make Targets view

    Use the Make Targets view to select the make targets you want to build in your workspace.

    @@ -79,5 +79,5 @@ IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_makefile_settings_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_makefile_settings_pref.htm index 2b5f8d253b5..247a92778fb 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_makefile_settings_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_makefile_settings_pref.htm @@ -11,7 +11,7 @@ -

    Makefile Editor preferences

    +

    Makefile Editor preferences

    Use the Makefile Editor preference panel in the Preferences window to set syntax and folding options for the Makefile editor.

    @@ -73,6 +73,6 @@
    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mem_view_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mem_view_pref.htm index 14bbabff111..5144f141186 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mem_view_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mem_view_pref.htm @@ -13,7 +13,7 @@ -

    Traditional Memory Rendering preferences

    +

    Traditional Memory Rendering preferences

    Use the Traditional Memory Rendering preference panel to change the appearance of the Memory view when displaying memory in traditional mode.

    C/C++ Projects View

    @@ -96,6 +96,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_memoryview.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_memoryview.htm index c739594b74d..814ffca12ad 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_memoryview.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_memoryview.htm @@ -12,7 +12,7 @@ -

    Memory view

    +

    Memory view

    The Memory view of the Debug perspective lets you monitor and modify your process memory. The process memory @@ -218,6 +218,6 @@ configured to display two renderings simultaneously.


    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_build.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_build.htm index 052658032ce..9c22813f53b 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_build.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_build.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Managed Make File, C/C++ Build

    +

    C/C++ Project Properties, Managed Make File, C/C++ Build

    Customizes the options used for a specific file in your build configuration. Select a tab in the Resource Configuration settings area to set a specific category of options. @@ -38,5 +38,5 @@ File, Info
    Build

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_info.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_info.htm index b8714b93d36..1bd158d2144 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_info.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_info.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Managed Make File, Info

    +

    C/C++ Project Properties, Managed Make File, Info

    C/C++ Project Properties, Managed Make File, Info

    @@ -31,5 +31,5 @@ File, C/C++ Build
    C++ Project Properties, Managed, Info

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_rcbs.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_rcbs.htm index 06c623ae5d7..2651d23743f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_rcbs.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_rcbs.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Managed Make File, C/C++ Build, Custom +

    C/C++ Project Properties, Managed Make File, C/C++ Build, Custom Build Steps

    Customizes the selected build configuration allowing the specification of a user defined build command step @@ -62,5 +62,5 @@ File, Info
    C++ Project Properties, Managed, C/C++ Build, Tool Settings

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_tool_settings.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_tool_settings.htm index e91ce49025b..7716667fefd 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_tool_settings.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_mfile_tool_settings.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Managed Make File, C/C++ Build, Tool +

    C/C++ Project Properties, Managed Make File, C/C++ Build, Tool Settings

    Customizes the tools and tool options used by the selected file in your build configuration. @@ -36,5 +36,5 @@ File, Info
    Managed, C/C++ Build, Tool Settings

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_modules_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_modules_view.htm index 3798cfaca37..4bafd780f89 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_modules_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_modules_view.htm @@ -13,7 +13,7 @@ -

    Modules view

    +

    Modules view

    The Modules view of the Debug perspective lets you view information about the modules loaded in the current @@ -77,6 +77,6 @@ source files, etc.

    IBM Copyright Statement
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_navigator_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_navigator_view.htm index c6e20e44460..0c40db17a6f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_navigator_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_navigator_view.htm @@ -10,7 +10,7 @@ -

    Navigator view

    +

    Navigator view

    The Navigator view provides a hierarchical view of the resources in the Workbench including hidden files.

    Navigator View

    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz.htm index ceb99d54f51..18d725ce476 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz.htm @@ -7,7 +7,7 @@ New Project Wizard -

    New Project Wizard

    +

    New Project Wizard

    The New Project wizard helps you create a new C or C++ project in the workbench. To access the wizard, from the menu bar select File > New > Project. @@ -51,5 +51,5 @@ ALT="Related concepts" width="143" height="21">
    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_config.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_config.htm index 4d0b97945c5..992b2887cf3 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_config.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_config.htm @@ -7,7 +7,7 @@ -

    New Project Wizard, Select configurations

    +

    New Project Wizard, Select configurations

    You can select configuration(s) from this page of the wizard.

    New Project Wizard, Select configurations

    @@ -67,5 +67,5 @@ ALT="Related concepts" width="143" height="21">
    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_name.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_name.htm index 5b24ca9e0d0..d7dbb81e2ab 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_name.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_name.htm @@ -7,7 +7,7 @@ -

    New Project Wizard - Select Name and Location

    +

    New Project Wizard - Select Name and Location

    Select a name for the project. You can also enter a new path for your project by deselecting the Use Default Location checkbox and entering the new path in the Location text box.

    @@ -57,5 +57,5 @@ ALT="Related concepts" width="143" height="21">

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_toolchain.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_toolchain.htm index 44e8917909e..febc2023cba 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_toolchain.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_toolchain.htm @@ -7,7 +7,7 @@ -

    New Project Wizard, Select a toolchain

    +

    New Project Wizard, Select a toolchain

    You can select toolchain(s) from this page of the wizard. A toolchain is a set of tools (such as a compiler, linker, and assembler) intended to build your project. Additional tools, such as a debugger, can be associated with a toolchain. There can be several toolchains available, depending on the project type you specify, and the compilers installed on your system.

    @@ -53,5 +53,5 @@ ALT="Related concepts" width="143" height="21">
    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_type.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_type.htm index b4c655c1f7d..4990b4c3846 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_type.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_new_proj_wiz_type.htm @@ -7,7 +7,7 @@ -

    New Project Wizard, Select a Project Type

    +

    New Project Wizard, Select a Project Type

    You can select a type of project from this page of the wizard. This project type will determine the toolchain and data, and tabs that the CDT uses. Once created, C/C++ projects display in the C/C++ Projects view.

    New Project Wizard, Select a Project Type

    @@ -52,5 +52,5 @@ ALT="Related concepts" width="143" height="21">
    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_behavior.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_behavior.htm index 9dde37f9e99..abd1cdd37f3 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_behavior.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_behavior.htm @@ -9,7 +9,7 @@ -

    Makefile Project - Behavior page

    +

    Makefile Project - Behavior page

    Use the Behavior page in the Makefile Projects preference panel to define build behavior.

    Makefile project - behavior page

    @@ -73,6 +73,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - + diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_buildset.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_buildset.htm index 1a8cedd586a..bf296fc0785 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_buildset.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_buildset.htm @@ -10,7 +10,7 @@ -

    Makefile Project - Builder Settings page

    +

    Makefile Project - Builder Settings page

    Use the Builder Settings page in the Makefile Projects preference panel to define build settings.

    Make Builder Preferences window

    @@ -65,6 +65,6 @@
    IBM Copyright Statement
    Nokia Copyright Statement - + diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_def_symb.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_def_symb.htm index 44a90c5be86..8cb2779458f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_def_symb.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_def_symb.htm @@ -21,7 +21,7 @@ END INFOPOP--> -

    Manage defined symbols dialog box

    +

    Manage defined symbols dialog box

    You can manage preprocessor symbols from the Manage defined symbols dialog box.

    Project properties

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_discovery_options.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_discovery_options.htm index f7dc3c311e1..8cfdf7bdaa5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_discovery_options.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_discovery_options.htm @@ -10,7 +10,7 @@ -

    Makefile Project - Discovery Options page

    +

    Makefile Project - Discovery Options page

    Use the Discovery Options page in the Makefile Projects preference panel to configure various options for the scanner configuration.

    Makefile project - discovery options page

    @@ -76,6 +76,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_binary.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_binary.htm index 6b26022882b..1f7d673711a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_binary.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_binary.htm @@ -11,7 +11,7 @@ -

    Makefile Project - Binary Parsers page

    +

    Makefile Project - Binary Parsers page

    Use the Binary Parser page in the Makefile Project preference panel to manage the binary parsers available to projects.

    Binary Parser Preferences Panel

    @@ -59,6 +59,6 @@
    IBM Copyright Statement
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_error.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_error.htm index 890c002e21f..7380d82f057 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_error.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_parser_error.htm @@ -11,7 +11,7 @@ -

    Makefile Project - Error Parsers page

    +

    Makefile Project - Error Parsers page

    Use the Error Parsers page in the @@ -76,6 +76,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - +

    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_platf.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_platf.htm index 76666253f96..10589223153 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_platf.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_newproj_platf.htm @@ -11,7 +11,7 @@ -

    Target platform, C/C++ Properties window

    +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_open_element.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_open_element.htm index 6644fb36c5f..d236ba46f22 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_open_element.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_open_element.htm @@ -9,7 +9,7 @@ -

    Open Element

    +

    Open Element

    Use Open Element to open up the declaration of C/C++ classes, structures, unions, typedefs, enumerations, namespaces, functions, methods and variables.

    @@ -20,6 +20,6 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_outline_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_outline_view.htm index 84b5413056d..097ece4ca95 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_outline_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_outline_view.htm @@ -10,7 +10,7 @@ -

    Outline view

    +

    Outline view

    The Outline view displays an outline of a structured C/C++ file that is currently open in the editor area, by listing the structural elements.

    @@ -165,6 +165,6 @@ C/C++ Projects view

    Views


    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build.htm index 593750ab3c2..6bb4a8609a1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build.htm @@ -11,7 +11,7 @@ -

    Build preferences

    +

    Build preferences

    Use the Build preference panel to define build options.

    @@ -28,6 +28,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_error_parsers.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_error_parsers.htm index b51ef9cf239..d32a8ce53b5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_error_parsers.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_error_parsers.htm @@ -11,7 +11,7 @@ -

    Error Parser Options

    +

    Error Parser Options

    Use the Error Parsers Tab on Build preference panel to define global error parsing options. @@ -141,6 +141,6 @@ IBM Copyright Statement
    Nokia Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_vars.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_vars.htm index a31c04e56c7..b9ab714f60e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_vars.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_build_vars.htm @@ -11,7 +11,7 @@ -

    Build Variables preferences

    +

    Build Variables preferences

    Use the Build Variables preference panel to add, edit, or remove local build variables. Local build variables are displayed in bold text.

    Build Variables Preferences Page

    @@ -55,6 +55,6 @@
    Nokia Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_multi_cfg.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_multi_cfg.htm index f0d3c37378b..c3bca8e9479 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_multi_cfg.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_multi_cfg.htm @@ -10,7 +10,7 @@ -

    Multi-Configuration Edit preferences

    +

    Multi-Configuration Edit preferences

    Use the Multi-Configuration Edit preference panel to simultaneously edit properties for multiple project configurations. Its possible to select one or more configurations for editing.

    But, then we deal with string list property values, it is not obvious how to concatenate them, if they differ.

    Multi-Configuration Edit preferences tab

    @@ -63,6 +63,6 @@

    Related reference
    Property Pages Settings preferences

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_prop_pages.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_prop_pages.htm index 233b5a14abb..ab469cff846 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_prop_pages.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_prop_pages.htm @@ -10,7 +10,7 @@ -

    Property Pages Settings preferences

    +

    Property Pages Settings preferences

    Use the Property Pages Settings preference panel to set the behaviors of CDT property pages.

    Property Pages Settings Preference Panel

    @@ -79,6 +79,6 @@

    Related reference
    Multi-Configuration Edit preferences

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_task_tags.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_task_tags.htm index 825f4be97a8..eff22be6717 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_task_tags.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_task_tags.htm @@ -10,7 +10,7 @@ -

    Task Tags preferences

    +

    Task Tags preferences

    Use the Task Tags preference panel to configure global todo tags for C/C++ editor views.

    Task Tags Preferences

    @@ -74,6 +74,6 @@
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_defaults.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_defaults.htm index edcd21623a7..e5b9b46ffc0 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_defaults.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_defaults.htm @@ -9,7 +9,7 @@ -

    CDT Project Wizard Defaults preferences

    +

    CDT Project Wizard Defaults preferences

    These settings affect CDT New Project Wizard behaviour.

    CDT Project Wizard Defaults preferences tab

    @@ -29,6 +29,6 @@
    Saves current settings.
    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_toolchains.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_toolchains.htm index 11e94f71968..dc774ebdab1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_toolchains.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_pref_wizard_toolchains.htm @@ -10,7 +10,7 @@ -

    New CDT Project Wizard preferences

    +

    New CDT Project Wizard preferences

    Use the New CDT Project Wizard to define which toolchains are selected in New CDT Project Wizard by default.

    CDT Project Wizard Toolchains preferences tab

    @@ -58,6 +58,6 @@
    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_problems_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_problems_view.htm index 21726fd8e02..96afc19ae83 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_problems_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_problems_view.htm @@ -10,7 +10,7 @@ -

    Problems view (C/C++)

    +

    Problems view (C/C++)

    Use the Problems view to display any errors encountered during a build.

    Problems View

    @@ -50,6 +50,6 @@ If you select an error the associated file will open in a C/C++ Editor
    Nokia Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_project_explorer_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_project_explorer_view.htm index 5811f8892e1..0847ce1cc3b 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_project_explorer_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_project_explorer_view.htm @@ -10,7 +10,7 @@ -

    Project Explorer view

    +

    Project Explorer view

    The Project Explorer view displays, in a tree structure similar to the C/C++ Projects view, but it is not limited to C and C++ projects. In this view you can do the following:

    • Browse the elements of C/C++ source files
    • @@ -228,5 +228,5 @@ IBM Copyright Statement

      - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_all.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_all.htm index 4e38cf20622..ed3577ac324 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_all.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_all.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Configuration management

    +

    C/C++ Project Properties, Configuration management

    All CDT-specific property pages have unified controls to handle configurations. @@ -83,5 +83,5 @@ to handle configurations.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build.htm index a1e6bd17524..e446b5934fa 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, C/C++ Build

    +

    C/C++ Project Properties, C/C++ Build

    This page serves as the main window that contains all builder-specific property pages. In addition, directly from this window you can define preferences for the Builder settings and Behaviour properties.

    @@ -211,6 +211,6 @@ and, moreover, change the visibility of other property pages.

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_discovery.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_discovery.htm index 0f979e5de2e..82c33e43722 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_discovery.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_discovery.htm @@ -8,11 +8,11 @@ -

    Discovery Options properties

    +

    Discovery Options properties

    Use the Discovery Options properties panel to control how information required to build your project is discovered, enhance search and Content Assist functionality, and automatically enhance your makefile, such as include paths and symbol definitions.

    Discovery options preference page

    - +
    @@ -172,5 +172,5 @@ the entire project (configuration). This means that both the project and per-fil


    QNX Copyright Statement

    - + diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_environment.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_environment.htm index 0c9ef687baa..e6acfc1efc1 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_environment.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_environment.htm @@ -8,7 +8,7 @@ -

    C/C++ Project Properties, Environment

    +

    C/C++ Project Properties, Environment

    Use the Environment property page to customize the build environment for all projects in the workspace; it lets you control the environment variables used by the build.

    C/C++ Project Properties, Environment

    @@ -143,5 +143,5 @@ Use the Environment property page to customize the build enviro

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_artifact.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_artifact.htm index 8e1e8358804..94b36ef1be3 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_artifact.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_artifact.htm @@ -8,7 +8,7 @@ -

    C/C++ Properties, Build, Settings, Build Artifact tab

    +

    C/C++ Properties, Build, Settings, Build Artifact tab

    Use the Build Artifacts properties tab to specify build artifact information, such as the type and name, that gets built by the selected build configuration.

    C/C++ Properties, Build, Settings, Build Artifact tab

    @@ -115,5 +115,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_binparser.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_binparser.htm index 4bce46d8fcd..2fc03874cad 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_binparser.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_binparser.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Build, Settings, Binary Parser

    +

    C/C++ Project Properties, Build, Settings, Binary Parser

    Use the Binary Parsers properties tab to ensure the accuracy of the Project Explorer and C/C++ Projects views, and to successfully run and debug your programs. After you select the correct parser for your @@ -125,5 +125,5 @@ symbols of the object file using the C/C++ Projects view.


    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_errparser.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_errparser.htm index a299ed0a2e1..566c8c54473 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_errparser.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_errparser.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Build, Settings, Error Parsers

    +

    C/C++ Project Properties, Build, Settings, Error Parsers

    Use the Error Parsers properties tab to customize the list of parsers that detect error messages in the build output log.


    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_steps.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_steps.htm index ee75529c28b..39c3a44e902 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_steps.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_steps.htm @@ -7,7 +7,7 @@ -

    C/C++ Properties, Build, Settings, Build Steps tab

    +

    C/C++ Properties, Build, Settings, Build Steps tab

    Use the Build Steps properties tab to customize the selected build configuration allowing for the specification of user defined build command steps, as well displaying a descriptive message in the build output, immediately before and after, normal build @@ -139,5 +139,5 @@ including pre-build or post-build steps.


    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_tool.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_tool.htm index 95f71fef0a3..7d0a6d548a2 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_tool.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_tool.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Build, Settings, Tool settings tab

    +

    C/C++ Project Properties, Build, Settings, Tool settings tab

    Use the Tool Settings properties tab to customize the tools and tool options used in your build configuration.

    C/C++ Project Properties, Build, Settings, Tool Settings tab

    @@ -105,5 +105,5 @@ Use the Tool Settings properties tab to customize the tools and

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_toolchain.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_toolchain.htm index 67ce82d5288..73483b5c4aa 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_toolchain.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_toolchain.htm @@ -7,7 +7,7 @@ -

    Tool chain editor preferences (C/C++ Project Properties)

    +

    Tool chain editor preferences (C/C++ Project Properties)


    Customizes the toolchain used in your build configuration; it lets you specify which tools the builder needs to include when it builds the project for a specified toolchain and configuration.

    @@ -101,5 +101,5 @@ you specify which tools the builder needs to include when it builds the project

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_variables.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_variables.htm index dd8b24fd2bc..5fcd7f794bc 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_variables.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_variables.htm @@ -7,7 +7,7 @@ -

    Variables properties (C/C++ Project Properties)

    +

    Variables properties (C/C++ Project Properties)

    Customizes the Eclipse CDT build environment variables for all projects in the workspace; it lets you control the environment variables used by the build to for the purposes of building the selected configuration.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_builders.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_builders.htm index 88967501b1c..55c061fb216 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_builders.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_builders.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Builders

    +

    C/C++ Project Properties, Builders

    You can select which Builders to enable for this project and in which order they are used.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_cfg_dialog.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_cfg_dialog.htm index 9172eab6f53..c57a4769c07 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_cfg_dialog.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_cfg_dialog.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Configurations management.

    +

    C/C++ Project Properties, Configurations management.

    All CDT-specific property pages have unified controls to handle configurations. @@ -81,5 +81,5 @@ Selected configuration would not be made Active configuration (used to build pro

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general.htm index 11b706bc851..13467635e4c 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, C/C++ General

    +

    C/C++ Project Properties, C/C++ General

    General project properties

    C/C++ Project Properties, C/C++ General

    @@ -79,5 +79,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_doc.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_doc.htm index 4d59cabeb73..b35b4cbeb05 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_doc.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_doc.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, C/C++ Documentation

    +

    C/C++ Project Properties, C/C++ Documentation

    You can select which installed documentation to use for your project.

    C/C++ Project Properties, C/C++ Documentation

    @@ -80,5 +80,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_exp.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_exp.htm index 1d23c041b20..6135ef5de5b 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_exp.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_exp.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, General, Export page

    +

    C/C++ Project Properties, General, Export page

    You can modify the list of exported elements (include paths, symbols, libraries, library paths)

    @@ -100,6 +100,6 @@ There are 2 ways to make value exported: - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_idx.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_idx.htm index 0cabb335c04..0f685bc8c11 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_idx.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_idx.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, C/C++ Indexer

    +

    C/C++ Project Properties, C/C++ Indexer

    You can select which C/C++ Indexer to use for your project. The indexer is necessary for search and related features, like content assist.

    @@ -87,5 +87,5 @@ disables indexing. Every indexer may have its own set of options.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_lng.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_lng.htm index de9eda93e19..880573824f0 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_lng.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_lng.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Language mappings

    +

    C/C++ Project Properties, Language mappings

    Customize the use of C/C++ language associations in the Language Mappings preference panel for a project.

    C/C++ Project Properties, Language mapping

    @@ -40,5 +40,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_hier.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_hier.htm index 5c13bca6ef4..ed36a943444 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_hier.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_hier.htm @@ -9,7 +9,7 @@ -

    C/C++ Properties, Include Paths and Symbols, Data hierarchy tab

    +

    C/C++ Properties, Include Paths and Symbols, Data hierarchy tab

    Use the Data Hierarchy tab in the Paths and Symbols properties panel to inspect all data related to Project/Configuration description.

    This tab is optional, it can be enabled/disabled in Preferences.

    @@ -112,6 +112,6 @@ width="143" height="21">
    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_inc.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_inc.htm index 2bfd8f9230a..4e037ac29d5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_inc.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_inc.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Includes

    +

    C/C++ Project Properties, Paths and Symbols, Includes

    You can modify the list of included paths and change the order in which they are referenced.

    C/C++ Project Properties, Paths and Symbols, Includes

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_lib.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_lib.htm index 5ee6b721c2c..dbfc5d5705b 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_lib.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_lib.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Libraries

    +

    C/C++ Project Properties, Paths and Symbols, Libraries

    You can modify the list of libraries and change the order in which they are referenced.

    C/C++ Project Properties, Paths and Symbols, Libraries - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_libpath.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_libpath.htm index 7d24b36ce60..cb8e601caad 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_libpath.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_libpath.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Library paths

    +

    C/C++ Project Properties, Paths and Symbols, Library paths

    You can modify the list of library paths and change the order in which they are referenced.

    C/C++ Project Properties, Paths and Symbols, Library paths

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_out.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_out.htm index 0eedd0cb70e..c4a24c3fba9 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_out.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_out.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Output location

    +

    C/C++ Project Properties, Paths and Symbols, Output location

    You can modify a list of project output entries effective in given configuration.

    @@ -88,6 +88,6 @@ alt="C/C++ Project Properties, Paths and Symbols, Output location">

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_ref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_ref.htm index 3be8e44f4be..f41bff2605a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_ref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_ref.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Project References

    +

    C/C++ Project Properties, Paths and Symbols, Project References

    Project references are a powerful way of expressing dependencies between Build configurations in different projects. Specifically they perform 2 roles: @@ -121,5 +121,5 @@ up the Include paths and Library link lines.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_src.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_src.htm index 9a51f68ef23..e4f160c757c 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_src.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_src.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Source location

    +

    C/C++ Project Properties, Paths and Symbols, Source location

    You can modify a list of project source entries effective in given configuration.

    @@ -88,6 +88,6 @@ alt="C/C++ Project Properties, Paths and Symbols, Source location">

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_sym.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_sym.htm index 2fca8bb6a74..0d602479909 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_sym.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_pns_sym.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Paths and Symbols, Symbols

    +

    C/C++ Project Properties, Paths and Symbols, Symbols

    You can modify the list of preprocessor symbols.

    C/C++ Project Properties, Paths and Symbols, Symbols

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_typ.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_typ.htm index 6008f5e24c9..72d3ba3a9f7 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_typ.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_general_typ.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, File Types

    +

    C/C++ Project Properties, File Types

    You can view a list of file types on the File Types page of a C/C++ project's properties window.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_dialog.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_dialog.htm index e86f046329f..340c0372df7 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_dialog.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_dialog.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Manage Configuration Dialog

    +

    C/C++ Project Properties, Manage Configuration Dialog

    Manages the configurations defined for the project. Select a button to add, rename, remove configuration or set it active. @@ -90,6 +90,6 @@ alt="C/C++ Project Properties, Manage Configuration Dialog">

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_newdialog.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_newdialog.htm index 42c5a7deb22..d18a4129d22 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_newdialog.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_newdialog.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, New Configuration Dialog

    +

    C/C++ Project Properties, New Configuration Dialog

    Creates a new configuration based on either an existing configuration or a default configuration. @@ -86,6 +86,6 @@ alt="C/C++ Project Properties, New Configuration Dialog">

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_rendialog.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_rendialog.htm index f3b65777cb0..e26a615281e 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_rendialog.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_manage_rendialog.htm @@ -9,7 +9,7 @@ -

    C/C++ Project Properties, Rename Configuration Dialog

    +

    C/C++ Project Properties, Rename Configuration Dialog

    Renames the name and the description of the existing configuration. @@ -80,6 +80,6 @@ alt="C/C++ Project Properties, Rename Configuration Dialog">

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_ref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_ref.htm index 20b9e2d8b73..19220ca59bb 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_ref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_ref.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Project References

    +

    C/C++ Project Properties, Project References

    C/C++ Project, Project References

    @@ -75,5 +75,5 @@

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_refactoring_history.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_refactoring_history.htm index f3222cc112d..7d6f30c7383 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_refactoring_history.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_refactoring_history.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Refactoring History

    +

    C/C++ Project Properties, Refactoring History

    Lets you explore the entire refactoring history for the currently selected project.

    C/C++ Project, Managed, Refactoring History

    @@ -83,5 +83,5 @@ Group by Date: Refactorings are grouped by date. The refactoring history dialog

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_resource.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_resource.htm index 38a9decf5e0..93ac011a1ea 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_resource.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_resource.htm @@ -7,7 +7,7 @@ -

    C/C++ Project Properties, Resource

    +

    C/C++ Project Properties, Resource

    Shows resource information for the selected type.


    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_rundebug.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_rundebug.htm index f021ef04d12..3d0fda4dcf9 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_rundebug.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_prop_rundebug.htm @@ -7,7 +7,7 @@ -

    C/C++ Properties Run and Debug settings

    +

    C/C++ Properties Run and Debug settings

    Run/Debug settings are mostly applicable to Java projects, not to CDT ones. @@ -77,5 +77,5 @@ Run/Debug settings are mostly applicable to Java projects, not to CDT ones.

    Intel Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties.htm index 55d7cd4db0a..8e30ce883ea 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties.htm @@ -10,7 +10,7 @@ -

    CDT Properties

    +

    CDT Properties

    This section describes C/C++ Properties.

    Properties can be obtained for CDT projects, folders and separate files. To select object properties, right click on object in view and select Properties.

    @@ -79,5 +79,5 @@ To select object properties, right click on object in view and select Pr

    Intel Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties_view.htm index 0825996d1cb..94cec5ee083 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_properties_view.htm @@ -10,7 +10,7 @@ -

    Properties view

    +

    Properties view

    The Properties view displays property names and values for a selected item such as a resource.

    Properties View

    Toolbar buttons allow you to toggle to display properties by category or to filter advanced properties. Another toolbar button allows you to restore the selected property to its default value.

    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_registersview.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_registersview.htm index b7030f4324b..569a880fc90 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_registersview.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_registersview.htm @@ -12,7 +12,7 @@ -

    Registers view

    +

    Registers view

    The Registers view of the Debug perspective lists information about the registers in a selected stack frame. Values that have changed are highlighted in the Registers view when your program @@ -186,6 +186,6 @@ stops.


    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm index 13d5b56d8d7..e22bab5c5fd 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm @@ -11,7 +11,7 @@ -

    Arguments page, Run or Debug dialog boxes

    +

    Arguments page, Run or Debug dialog boxes

    The Arguments page of the Run or Debug dialog box lets you specify the program arguments that an application uses and the working directory for a run or debug configuration.

    @@ -43,6 +43,6 @@ that an application uses and the working directory for a run or debug configurat Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm index c3dc2c6994b..d53384739f4 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm @@ -11,7 +11,7 @@ -

    Common page, Run or Debug dialog box

    +

    Common page, Run or Debug dialog box

    The Common page of the Run and Debug dialog boxes lets you specify the location in which to store your run configuration and how you access it, how standard input and output is handled, and if background launches are enabled or not.

    @@ -47,6 +47,6 @@ the location in which to store your run configuration and how you access it, how Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_dbg.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_dbg.htm index 26925b43891..96a090fd041 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_dbg.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_dbg.htm @@ -11,7 +11,7 @@ -

    Debugger page, Run or Debug dialog box

    +

    Debugger page, Run or Debug dialog box

    The Debugger page of the Run and Debug dialog boxes lets you select a debugger to use when debugging an application.

    @@ -41,6 +41,6 @@ alt="Advanced Options dialog"> Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_env.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_env.htm index 5638b8e727e..c3c88273d59 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_env.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_env.htm @@ -11,7 +11,7 @@ -

    Environment page, Run or Debug dialog box

    +

    Environment page, Run or Debug dialog box

    The Environment page of the Run and Debug dialog boxes lets you set environment variables and values to use when an application runs.

    @@ -44,6 +44,6 @@ set environment variables and values to use when an application runs.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_launch_group.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_launch_group.htm index 6359d557c29..b8559e891c5 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_launch_group.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_launch_group.htm @@ -11,7 +11,7 @@ -

    Launch Group

    +

    Launch Group

    The user can launch multiple applications at the same time or in sequential order. This is made possible by the launch configuration type: Launch Group.

    @@ -51,11 +51,16 @@ The Common tab lets you select where the configuration is stored, see <
    Discovery Options preferences
    - @@ -113,6 +118,6 @@ There are several actions available that control what should be done after each Run and Debug dialog box

    IBM Copyright Statement - + diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_main.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_main.htm index 4b2b493e8c9..3ebb7382f52 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_main.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_main.htm @@ -11,7 +11,7 @@ -

    Main page, Run or Debug dialog boxes

    +

    Main page, Run or Debug dialog boxes

    The Main page of the Run dialog box and the Debug dialog box, identifies the project and application you want to run or debug.

    @@ -39,6 +39,6 @@ Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm index 4c2a78080b1..c1d51fb4923 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm @@ -11,7 +11,7 @@ -

    Source page, Run or Debug dialog box

    +

    Source page, Run or Debug dialog box

    The Source page of the Run and Debug dialog boxes lets you specify the location of source files used when debugging a C or C++ application. By default, this information is taken from the build path of your project.

    @@ -44,6 +44,6 @@ application. By default, this information is taken from the build path of your p Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_scanner_cfg_disc.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_scanner_cfg_disc.htm index e945f0bdab1..e67e7bc9afd 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_scanner_cfg_disc.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_scanner_cfg_disc.htm @@ -9,7 +9,7 @@ -

    Scanner Configuration Discovery

    +

    Scanner Configuration Discovery

    You can configure various options for the scanner configuration on the Scanner Configuration Discovery page of the C/C++ Properties window.

    Editor General Preferences Window

    @@ -40,6 +40,6 @@ Project properties

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search.htm index 3ffafd9a8fa..43d0109e04d 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search.htm @@ -7,7 +7,7 @@ -

    C/C++ search

    +

    C/C++ search

    Search Dialog Box

    @@ -198,5 +198,5 @@ editor

    Red Hat Copyright Statement
    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search_view.htm index f9d308f0fa5..52520558114 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_search_view.htm @@ -10,7 +10,7 @@ -

    Search view

    +

    Search view

    Any matches are reported in the Search view.

    Search View

    @@ -121,6 +121,6 @@ you can put the focus on that view and get more options on the IBM Copyright Statement
    Nokia Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_signals_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_signals_view.htm index 21a7ad2b197..3fd2ea50d07 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_signals_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_signals_view.htm @@ -12,7 +12,7 @@ -

    Signals view

    +

    Signals view

    The Signals view of the Debug perspective lets you view the signals defined on the selected debug target and how the debugger handles each one.

    @@ -106,6 +106,6 @@ debugger handles each one.

    IBM Copyright Statement
    Nokia Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_tasks_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_tasks_view.htm index 507b09a496a..c2068ac641a 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_tasks_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_tasks_view.htm @@ -12,7 +12,7 @@ -

    Tasks View

    +

    Tasks View

    The Tasks view lets you create your own tasks. In addition to having the Tasks view automatically add TODO and FIXME tasks from comments in code, @@ -39,6 +39,6 @@ handling routines that you want to verify.


    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_toolbar.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_toolbar.htm index cd237e76169..e51d948bea9 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_toolbar.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_toolbar.htm @@ -9,7 +9,7 @@ -

    C/C++ Toolbar

    +

    C/C++ Toolbar

    C/C++ Toolbar

    C/C++ Toolbar icons

    @@ -152,6 +152,6 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_type_hierarchy_view.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_type_hierarchy_view.htm index 71f3c2ba651..844d7503639 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_type_hierarchy_view.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_type_hierarchy_view.htm @@ -9,7 +9,7 @@ -

    +

    Type Hierarchy view

    @@ -224,5 +224,5 @@


    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_view_executables.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_view_executables.htm index c8415357b48..fe975a16a0f 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_view_executables.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_view_executables.htm @@ -10,7 +10,7 @@ -

    Executables view

    +

    Executables view

    The Executables view provides a dynamic list of executables and their related source files. The Executables view makes it easy to:

    • target all binaries for debugging because the symbolics are automatically loaded when a bld.inf is imported or a project is created from a template
    • @@ -96,5 +96,5 @@ Views


      - Nokia Copyright Statement + Nokia Copyright Statement
    diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_views.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_views.htm index 211cd383ab6..1ce552d77ef 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_views.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_views.htm @@ -9,7 +9,7 @@ -

    Selecting Views and Editors

    +

    Selecting Views and Editors

    To see a list of all views, from the menu bar choose Window > Show View > Others.

    Show View Dialog Box

    @@ -46,5 +46,5 @@ The Editor view is not listed under Window > Show View IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_brkpnts_watch.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_brkpnts_watch.htm index 6afafcd224f..6a64116ea1a 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_brkpnts_watch.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_brkpnts_watch.htm @@ -10,7 +10,7 @@ -

    Using breakpoints, watchpoints, and breakpoint actions

    +

    Using breakpoints, watchpoints, and breakpoint actions

    The following topics explain how to use breakpoints, watchpoints, and breakpoint actions:

    @@ -23,6 +23,6 @@

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_build_task.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_build_task.htm index 04508437546..2211edbf908 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_build_task.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_build_task.htm @@ -9,7 +9,7 @@ -

    Building projects

    +

    Building projects

    The following topics explain how to build a project, and to manage compile errors:

    Renaming a project
    Defining Project Build settings
    @@ -30,6 +30,6 @@

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_builderrors.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_builderrors.htm index 0d1451e8827..bb6d4b439ed 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_builderrors.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_builderrors.htm @@ -10,7 +10,7 @@ -

    Tracking down compilation errors

    +

    Tracking down compilation errors

    After a build finishes, CDT displays the build output in the Console View. The build output shows the result of build and a user can inspect it to find out if it was successful or not. To assist with that @@ -56,6 +56,6 @@ generated on "Error Parsers" Preference page.

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_con_assist.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_con_assist.htm index c3da02edaa3..650f32b4797 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_con_assist.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_con_assist.htm @@ -10,7 +10,7 @@ -

    Working with Content Assist

    +

    Working with Content Assist

    The following topics provide information about code entry aids:

    Using Content Assist
    Creating and editing templates
    @@ -18,6 +18,6 @@

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_debug.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_debug.htm index 9f3ffd470f7..83024519892 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_debug.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_debug.htm @@ -10,7 +10,7 @@ -

    Debugging

    +

    Debugging

    The following topics explain how to debug your project:

    @@ -30,6 +30,6 @@

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_proj_files.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_proj_files.htm index 81c30efc8de..2ca76f76d3b 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_proj_files.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_proj_files.htm @@ -10,7 +10,7 @@ -

    Working with C/C++ project files

    +

    Working with C/C++ project files

    The following topics explain how to create and manage project files:

    Displaying C/C++ file components in the C/C++ Projects view
    Converting a C or C++ nature for a project
    @@ -23,6 +23,6 @@ Set Discovery Options

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run.htm index e0e463ac752..e51ce30b95b 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run.htm @@ -10,7 +10,7 @@ -

    Running and debugging projects

    +

    Running and debugging projects

    The following topics explain how to run a C or C++ application using an existing run configuration, and how to create a new run configuration.

    Creating or editing a run/debug configuration
    Selecting a run or debug configuration
    @@ -37,6 +37,6 @@

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run_config.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run_config.htm index 69a5bed09fa..5e7f33d1ea3 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run_config.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_run_config.htm @@ -10,7 +10,7 @@ -

    Creating or editing a run/debug configuration

    +

    Creating or editing a run/debug configuration

    You can run an application by right-clicking the file and clicking Open With > System Editor, or you can create a run configure a run environment with which to run your application.

    @@ -34,6 +34,6 @@ which to run your application.

     

    QNX Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_tasks.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_tasks.htm index e2396de0c7a..4131e4ce55d 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_tasks.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_tasks.htm @@ -10,7 +10,7 @@ -

    Tasks

    +

    Tasks

    The following topics provide step-by-step procedural instructions to help you perform various activities with the CDT:

    Creating a project
    @@ -81,6 +81,6 @@ Setting Source Folders

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_write_code.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_write_code.htm index 79c57a06b5b..c508b936f6e 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_write_code.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_o_write_code.htm @@ -10,7 +10,7 @@ -

    Writing code

    +

    Writing code

    The following topics explain how to work with the C/C++ editor:

    Customizing the C/C++ editor
    Commenting out code
    @@ -26,6 +26,6 @@ Rename
    Toggle Function Definition

    QNX Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brk_action.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brk_action.htm index c8952394a6a..cab9e8f382a 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brk_action.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brk_action.htm @@ -10,7 +10,7 @@ -

    Adding breakpoint actions

    +

    Adding breakpoint actions

    To add a new breakpoint action:

      @@ -44,6 +44,6 @@
      Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brkpnts.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brkpnts.htm index c8a044dce09..e0297a338d0 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brkpnts.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_brkpnts.htm @@ -18,7 +18,7 @@ function changeSize(theImage,wd,ht) { -

    Adding breakpoints

    +

    Adding breakpoints

    A breakpoint is set on an executable line of a program. If the breakpoint is enabled when you debug, the execution suspends before that line of code @@ -46,6 +46,6 @@ marker bar.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_build_var.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_build_var.htm index 2b60a869ade..77a55d45012 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_build_var.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_build_var.htm @@ -13,7 +13,7 @@ -

    Adding and Editing Build Variables

    +

    Adding and Editing Build Variables

    Use the Define a New Build Variable dialog box to add local build variables or the Edit Existing Build Variable dialog box to edit a previously defined variable. Both are accessible from the Build Variables preference panel.

    @@ -76,6 +76,6 @@ dialog box to edit a previously defined variable. Both are accessible from the <
    Nokia Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_codetemp.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_codetemp.htm index c3525f108f7..2138bc6becc 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_codetemp.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_codetemp.htm @@ -10,7 +10,7 @@ -

    Creating and editing templates

    +

    Creating and editing templates

    Content Assist uses templates to enable you to quickly make use of commonly used code segments.

    To create a template:

    @@ -69,6 +69,6 @@

    QNX Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_custom_persp.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_custom_persp.htm index fc675443daa..92b1e7e9b74 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_custom_persp.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_custom_persp.htm @@ -10,7 +10,7 @@ -

    Adding Convert to a C/C++ Project to the New menu

    +

    Adding Convert to a C/C++ Project to the New menu

    If Convert to a C/C++ Project is not available in your menubar, you can add it by clicking Window > Customize Perspective

    NOTE: This feature can update some managed make projects created by earlier versions of CDT.

    @@ -30,6 +30,6 @@

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_watch.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_watch.htm index 96d1c04b1ed..dc543ca28cf 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_watch.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_add_watch.htm @@ -12,7 +12,7 @@ -

    Adding watchpoints

    +

    Adding watchpoints

    A watchpoint is a special breakpoint that stops the execution of an application whenever the value of a given expression changes, without specifying @@ -47,6 +47,6 @@ true, regardless of when or where it occurred. You can set a watchpoint on a glo QNX Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addmaketarget.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addmaketarget.htm index 5cab099a34d..99da47437af 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addmaketarget.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addmaketarget.htm @@ -10,7 +10,7 @@ -

    Creating a make target

    +

    Creating a make target

    To create a make target:

    @@ -35,6 +35,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addrmv_brk_action.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addrmv_brk_action.htm index 69469470c75..3e6c573a510 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addrmv_brk_action.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_addrmv_brk_action.htm @@ -10,7 +10,7 @@ -

    Attaching or removing breakpoint actions

    +

    Attaching or removing breakpoint actions

    You can attach one or more breakpoint actions to a single breakpoint. For example, when the breakpoint is hit you could both log a message and play a sound. Actions are executed in the order they appear in the Actions for this breakpoint list.

    To attach or remove a breakpoint action from a breakpoint:

    @@ -49,6 +49,6 @@
    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autobuild.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autobuild.htm index a6c7a5f195d..56e650a51cd 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autobuild.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autobuild.htm @@ -7,7 +7,7 @@ -

    Disabling the Build Automatically option

    +

    Disabling the Build Automatically option

    By default, the Eclipse workbench is configured to build projects automatically. However, for C/C++ development you should disable this option, otherwise your entire project will be rebuilt whenever, for example, @@ -32,5 +32,5 @@ checkmark beside the Build Automatically menu item.

    Make Builder page, C/C++ Properties window

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autosave.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autosave.htm index 1b1a7aae8ee..ece0b7ea303 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autosave.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_autosave.htm @@ -9,7 +9,7 @@ -

    Autosaving on a build

    +

    Autosaving on a build

    You can let Eclipse save modified files whenever you perform a manual build. The files are saved before the build is performed so that the latest @@ -39,6 +39,6 @@ utility in the Console view.

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_build_process.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_build_process.htm index a6b911c6e0a..3e97596c007 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_build_process.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_build_process.htm @@ -12,7 +12,7 @@ -

    Building a CDT project

    +

    Building a CDT project

    Provide roadmap whereby a link is provided to each build setting-related task.

    @@ -30,6 +30,6 @@ task.

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cbuild_pref.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cbuild_pref.htm index 25bb27ff93f..acbe5d95dd2 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cbuild_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cbuild_pref.htm @@ -7,7 +7,7 @@ -

    Customizing the Console view

    +

    Customizing the Console view

    The Console view displays the output of the utilities invoked when building a project or the programs output when running/debugging.

    To set Console view preferences

    @@ -37,5 +37,5 @@ building a project or the programs output when running/debugging.

    Views


    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_comment_out.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_comment_out.htm index 1daa2fec1a2..d1829f923a7 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_comment_out.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_comment_out.htm @@ -10,7 +10,7 @@ -

    Commenting out code

    +

    Commenting out code

    You can comment out one or more lines of code in any C/C++ editor view. The leading characters // are added to the beginning of each line when commenting one or more lines of code. @@ -52,6 +52,6 @@ described above.


    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_contentassist.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_contentassist.htm index 1f3392994f0..68a0c1a02c7 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_contentassist.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_contentassist.htm @@ -10,7 +10,7 @@ -

    Using Content Assist

    +

    Using Content Assist

    Use Content Assist to insert C/C++ elements of your project, and templates into your code. You can insert a template into your source code rather than retyping commonly-used snippets of code.

    @@ -65,6 +65,6 @@ commonly-used snippets of code.

    IBM Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_controldebug.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_controldebug.htm index 23cb5107baa..a12ec534194 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_controldebug.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_controldebug.htm @@ -12,7 +12,7 @@ -

    Controlling debug execution

    +

    Controlling debug execution

    The debug execution controls are superceded by breakpoints. For example, if you attempt to step over a function and the program hits a breakpoint, @@ -47,6 +47,6 @@ core set of debug controls.

    Debug view

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_conv_proj.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_conv_proj.htm index 26e49018212..a043680dbc4 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_conv_proj.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_conv_proj.htm @@ -10,7 +10,7 @@ -

    Converting a C or C++ nature for a project

    +

    Converting a C or C++ nature for a project

    Use the Convert to a C/C++ Project wizard to assign a C nature to a C++ project or vice versa.

    @@ -41,6 +41,6 @@
    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_cdt_proj.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_cdt_proj.htm index 29321900f7c..1d98ac8e6f4 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_cdt_proj.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_cdt_proj.htm @@ -10,7 +10,7 @@ -

    Converting CDT 1.x Projects

    +

    Converting CDT 1.x Projects

    How you update your CDT 1.x project to the current CDT project format depends upon whether the project is a Standard Make project or a Managed Make project. For a Standard @@ -46,6 +46,6 @@ See Set Discovery Options for details.

    IBM Copyright Statement

    - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_mbs20_proj.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_mbs20_proj.htm index 1bcfced6464..3b16481f6ae 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_mbs20_proj.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_convert_mbs20_proj.htm @@ -10,7 +10,7 @@ -

    Converting CDT 2.x Managed Make Projects

    +

    Converting CDT 2.x Managed Make Projects

    For a CDT 2.x Managed Make project, the Managed Build system will prompt you to convert your project when it attempts to read the Managed Build project @@ -27,6 +27,6 @@ or exit Eclipse.

    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_create_make_target.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_create_make_target.htm index 9105aea7625..74560a7a15c 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_create_make_target.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_create_make_target.htm @@ -10,7 +10,7 @@ -

    Creating a Make Target

    +

    Creating a Make Target

    To create a make target:

      @@ -33,6 +33,6 @@ Make Target View


      IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cust_cpp_editor.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cust_cpp_editor.htm index d6215bf838e..763b6a242f7 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cust_cpp_editor.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_cust_cpp_editor.htm @@ -19,7 +19,7 @@ Customize the appearance of the C/C++ Editor. END INFOPOP--> -

    Customizing the C/C++ editor

    +

    Customizing the C/C++ editor

    You can change many of the C/C++ editor preferences.

    @@ -50,6 +50,6 @@ END INFOPOP--> C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_exes.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_exes.htm index 927129c26c4..65c7cff9cba 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_exes.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_exes.htm @@ -13,7 +13,7 @@ ul, li { padding: 3px 0px} -

    Debugging an Existing Executable

    +

    Debugging an Existing Executable

    Use the import feature to import and debug an executable you have already built. This feature will automatically create a project and debug configuration for you. This is helpful if you have an executable built with debug symbols but may not have the project used to build the executable.

    Importing Executables for Debugging

    @@ -62,5 +62,5 @@ ul, li { padding: 3px 0px} Run and Debug dialog box


    Nokia Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_prog.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_prog.htm index 42527b889cd..490a2c4bf15 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_prog.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_debug_prog.htm @@ -12,7 +12,7 @@ -

    Debugging a program

    +

    Debugging a program

    You must create a debug launch configuration the first time you debug your program.

    @@ -75,6 +75,6 @@ program.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_disassembly.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_disassembly.htm index d00068669a8..8a7d8effc47 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_disassembly.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_disassembly.htm @@ -12,7 +12,7 @@ -

    Stepping into disassembled code

    +

    Stepping into disassembled code

    The Disassembly view lets you examine your program as it steps into disassembled code. This is useful when the instruction pointer enters a function for which it does not have the source. @@ -36,6 +36,6 @@ when the Disassembly view has focus.


    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_discovery.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_discovery.htm index 64c67288509..6e3c0cbc4f2 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_discovery.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_discovery.htm @@ -7,7 +7,7 @@ -

    Set Discovery Options

    +

    Set Discovery Options

    For most make projects, you will want to parse the output of the build to populate your paths and symbols tables.

    To populate your tables:

    @@ -42,5 +42,5 @@ button.
    C/C++ Project Properties, Discovery Options

    QNX Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_endis_able_brk_wtch.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_endis_able_brk_wtch.htm index 141386bcbf3..38c1d87183a 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_endis_able_brk_wtch.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_endis_able_brk_wtch.htm @@ -12,7 +12,7 @@ -

    Enabling and disabling breakpoints and watchpoints

    +

    Enabling and disabling breakpoints and watchpoints

    You can temporarily disable a breakpoint or watchpoint without losing the information it contains.

    @@ -44,6 +44,6 @@ information it contains.

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_expressions.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_expressions.htm index 8f435fa2620..83a9ba183a4 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_expressions.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_expressions.htm @@ -12,7 +12,7 @@ -

    Adding expressions

    +

    Adding expressions

    You can add and view expressions in the Expressions view. The Expressions view is part of the Debug perspective.

    @@ -39,6 +39,6 @@ view is part of the Debug perspective.

    Debug views

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_filtererror.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_filtererror.htm index 84568557881..d71b0bba1b4 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_filtererror.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_filtererror.htm @@ -12,7 +12,7 @@ -

    Filtering the Problems view

    +

    Filtering the Problems view

    Depending on the complexity and stage of your program, an overwhelming number of errors can be generated. You can customize Problems view to only view certain types of errors.

    @@ -43,6 +43,6 @@ IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_imp_code_temp.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_imp_code_temp.htm index 18aa4261bdb..bc23bff3271 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_imp_code_temp.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_imp_code_temp.htm @@ -9,7 +9,7 @@ -

    Importing and exporting templates

    +

    Importing and exporting templates

    You can import and export templates.

    @@ -55,5 +55,5 @@ IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_jumperror.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_jumperror.htm index fa5ae341213..aaf286536a6 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_jumperror.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_jumperror.htm @@ -12,7 +12,7 @@ -

    Jumping to errors

    +

    Jumping to errors

    The CDT will parse the output from the make and compiler/linker. If the CDT can determine an error or a warning, the line is highlighted in the Console view and added @@ -53,6 +53,6 @@ Informational messages are marked with Info IBM Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_manualbuild.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_manualbuild.htm index 23c9cee5aea..3c6545e0f06 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_manualbuild.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_manualbuild.htm @@ -7,7 +7,7 @@ -

    Building Manually

    +

    Building Manually

    Manual builds let you choose the scope of a build, as well as options for building, or rebuilding projects. You can view the output of the make utility in the console.

    @@ -56,5 +56,5 @@ Build
    .

    Make Builder page, C/C++ Properties window

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_memory.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_memory.htm index 382273cf74e..971fa708642 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_memory.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_memory.htm @@ -12,7 +12,7 @@ -

    Working with memory

    +

    Working with memory

    You can inspect and change process memory.

    @@ -37,8 +37,8 @@ independently.

  • In the Debug view, select a debug session. Selecting a thread or stack frame automatically selects the associated session.
  • -
  • Select "Add Memory Monitor" in the context menu of the Memory Monitors pane. -The "Memory Monitor" dialog appears.
  • +
  • Select Add Memory Monitor in the context menu of the Memory Monitors pane. +The Memory Monitor dialog appears.
  • Type the address or expression that specifies the memory section you want to monitor and press "OK". The monitor appears in the monitor list and the Memory Renderings @@ -47,8 +47,8 @@ pane displays the contents of memory locations beginning at the specified addres

    To view memory in a different rendering:

      -
    1. Select "Add Rendering" in the context menu of the Memory Renderings pane. -The "Add Memory Rendering" dialog appears.
    2. +
    3. Select Add Rendering in the context menu of the Memory Renderings pane. +The Add Memory Rendering dialog appears.
    4. Select renderings from the list and press "OK".
    @@ -77,6 +77,6 @@ Changing process memory can cause a program to crash.

    Debug views

    IBM Copyright Statement - +
  • diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_cpp.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_cpp.htm index 5bfedd7194a..d929a1ffd67 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_cpp.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_cpp.htm @@ -15,7 +15,7 @@ function changeSize(theImage,wd,ht) { -

    Creating a C/C++ file

    +

    Creating a C/C++ file

    Files are edited in the C/C++ editor that is, by default, located in the editor area to the right of the Project Explorer or C/C++ Projects views.

    The marker bar on the left margin of the C/C++ editor, displays @@ -60,5 +60,5 @@ Projects view


    IBM Copyright Statement

    - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_make.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_make.htm index 23f6d21295a..d465916f26c 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_make.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_make.htm @@ -18,7 +18,7 @@ function changeSize(theImage,wd,ht) { -

    Creating a makefile

    +

    Creating a makefile

    If you have created a Standard Make C/C++ Project, you need to provide a makefile.

    @@ -51,7 +51,7 @@ view


    Views

    -IBM Copyright Statement - +IBM Copyright Statement

    + \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_run_config.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_run_config.htm index b89df2b1272..e583eec999f 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_run_config.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_new_run_config.htm @@ -9,7 +9,7 @@ -

    Creating a run or debug configuration

    +

    Creating a run or debug configuration

    You can create customized run configuration which you can save for reuse.

    @@ -38,6 +38,6 @@ Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_open_declarations.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_open_declarations.htm index a93c3efcbcf..4a71dcc5ee0 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_open_declarations.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_open_declarations.htm @@ -10,7 +10,7 @@ -

    Navigating to C/C++ declarations

    +

    Navigating to C/C++ declarations

    The Open Declaration feature lets you navigate to the declaration that matches a selected element in the C/C++ editor. It is recommended that you look for @@ -43,6 +43,6 @@ element declarations on successfully compiled programs.

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_build_set.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_build_set.htm index fcefbdcbfeb..f6b7dfefec7 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_build_set.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_build_set.htm @@ -7,7 +7,7 @@ -

    Defining Project Build settings

    +

    Defining Project Build settings

    The Builder Settings page lets you:

    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_error_parser.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_error_parser.htm index a443ece3df7..94932cbc4e3 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_error_parser.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_error_parser.htm @@ -12,7 +12,7 @@ -

    Tuning Error Parsers

    +

    Tuning Error Parsers

    Error Parsers scan build output line by line looking for errors and warnings (also for certain informational messages). They generate Problem Markers @@ -90,6 +90,6 @@ Note that that kind of parser needs to be the first to be able to provide the CW QNX Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new.htm index 15405b6cd85..0965ff7bc8c 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new.htm @@ -10,7 +10,7 @@ -

    Creating a project

    +

    Creating a project

    You can create a standard make or managed make C or C++ project.

    @@ -66,6 +66,6 @@ IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new_with_template.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new_with_template.htm index 8c99b54ad0d..f35eae834a9 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new_with_template.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_new_with_template.htm @@ -10,7 +10,7 @@ -

    Creating a project via a project template

    +

    Creating a project via a project template

    From CDT 4.0 its possible to create projects based upon templates defined by the IDE supplier. What this means is that you can easily create a project which contains customized source code and is ready for use in a few clicks. Some @@ -86,6 +86,6 @@ aspects of the generated project may be customized by the user as part of the ne
    Views

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_parser.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_parser.htm index bb036314de7..7145c077d62 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_parser.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_parser.htm @@ -7,7 +7,7 @@ -

    Selecting a binary parser

    +

    Selecting a binary parser

    Selecting the correct binary parser is important to ensure the accuracy of the C/C++ Projects view and to successfully run and debug your programs. Windows users should select the PE Windows Parser. UNIX @@ -59,5 +59,5 @@ for binary parser are got from Preferences during project creation.

    Binary Parser, C/C++ Properties window

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm index 9b79328b8ee..914011066cf 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm @@ -12,7 +12,7 @@ function newWin(url) { -

    Adding Include paths and symbols

    +

    Adding Include paths and symbols

    For CDT projects, you can define include paths and preprocessor symbols for the parser. This lets the parser understand the contents of the C/C++ source code so that you can more effectively use the search and code completion features.

    @@ -51,5 +51,5 @@ within your make project and select
    Working with C/C++ project files

    QNX Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_platf.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_platf.htm index 378e7ee5da3..a09359294e6 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_platf.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_platf.htm @@ -12,7 +12,7 @@ -

    Selecting a project type

    +

    Selecting a project type

    While creating CDT project project, you need to select its type. @@ -57,6 +57,6 @@ While creating CDT project project, you need to select its type. IBM Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_referenced_configs.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_referenced_configs.htm index 17d6eb6665b..f1b9d93d960 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_referenced_configs.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_referenced_configs.htm @@ -10,7 +10,7 @@ -

    Project References

    +

    Project References

    Project References are a powerful way of expressing dependencies between your CDT projects, allowing you to write modular software built with CDT's managedbuild. @@ -48,6 +48,6 @@ are propagated and kept in sync for you. Project References Page
    Export Settings Page - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_rename.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_rename.htm index 69e600ec889..3e613571405 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_rename.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_rename.htm @@ -10,7 +10,7 @@ -

    Renaming a project

    +

    Renaming a project

    You can rename a project, and have all references changed using the refactoring engine.

    @@ -48,6 +48,6 @@ This can take a significant amount of time for very large projects. The new name QNX Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_prvw_hide_files.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_prvw_hide_files.htm index 224db0c5f5d..a83e4c9b6ef 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_prvw_hide_files.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_prvw_hide_files.htm @@ -10,7 +10,7 @@ -

    Hiding files by type in the C/C++ Projects view

    +

    Hiding files by type in the C/C++ Projects view

    You can hide files by type that you do not want to see in the C/C++ Projects view.

    @@ -40,6 +40,6 @@ view

    Views

    IBM Copyright Statement - +

    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_refactoring.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_refactoring.htm index a5bc99f99a3..8852cb5de93 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_refactoring.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_refactoring.htm @@ -10,7 +10,7 @@ -

    Refactoring

    +

    Refactoring

    The following topics provide information about refactoring:

    Rename Refactoring
    @@ -21,6 +21,6 @@ IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_registers.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_registers.htm index e7a3ed13f9c..d4a6052b4de 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_registers.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_registers.htm @@ -12,7 +12,7 @@ -

    Working with registers

    +

    Working with registers

    You can modify registers in the Registers view.

    @@ -50,6 +50,6 @@ Debug views

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rem_wtch_brk.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rem_wtch_brk.htm index b3a7bfe83ec..6eace510a5a 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rem_wtch_brk.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rem_wtch_brk.htm @@ -12,7 +12,7 @@ -

    Removing breakpoints and watchpoints

    +

    Removing breakpoints and watchpoints

    When you remove a breakpoint or watchpoint, the corresponding icon is removed from the marker bar where it was inserted and the Breakpoints view.

    @@ -45,6 +45,6 @@ marker bar.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rename.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rename.htm index 691011d8b52..adbc2c21532 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rename.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_rename.htm @@ -10,7 +10,7 @@ -

    Rename Refactoring

    +

    Rename Refactoring

    Use the C/C++ Projects, Outline, or the Editor view Refactor > Rename context menu to refactor class & type names, methods, function & member names.

    @@ -34,6 +34,6 @@ IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_arg.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_arg.htm index 94928d66092..853382a89bd 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_arg.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_arg.htm @@ -10,7 +10,7 @@ -

    Specifying execution arguments

    +

    Specifying execution arguments

    You can specify the execution arguments that an application uses and the working directory for a run configuration.

    @@ -56,6 +56,6 @@ for a run configuration.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_com.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_com.htm index d53abeebd37..b54f753670e 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_com.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_com.htm @@ -10,7 +10,7 @@ -

    Specifying the location of the run configuration

    +

    Specifying the location of the run configuration

    When you create a run configuration, it is saved with the extension .launch in org.eclipse.debug.core. You can specify an alternate location in which to store your run configuration. You can @@ -60,6 +60,6 @@ perspective to open when running an application.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_config.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_config.htm index 6b4257bcbf0..eb9832b4b8b 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_config.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_config.htm @@ -10,7 +10,7 @@ -

    Selecting a run or debug configuration

    +

    Selecting a run or debug configuration

    You can select an existing run configuration to use to run your program.

    @@ -38,6 +38,6 @@ Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_dbg.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_dbg.htm index 8f99ea70170..c7a9b32be62 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_dbg.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_dbg.htm @@ -18,7 +18,7 @@ function changeSize(theImage,wd,ht) { -

    Defining debug settings

    +

    Defining debug settings

    Select a debugger to use when debugging an application.

    @@ -63,6 +63,6 @@ function changeSize(theImage,wd,ht) { Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_env.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_env.htm index 1c981b6f702..a4e1545371f 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_env.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_env.htm @@ -10,7 +10,7 @@ -

    Setting environment variables

    +

    Setting environment variables

    You can set the environment variables and values to use when an application runs.

    @@ -60,6 +60,6 @@ runs.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_main.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_main.htm index eee321c3a0e..e70817004a2 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_main.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_main.htm @@ -11,7 +11,7 @@ -

    Selecting an application to run or debug

    +

    Selecting an application to run or debug

    You need to specify the project or program that you want to run or debug for this run configuration.

    @@ -60,6 +60,6 @@ this run configuration.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_source.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_source.htm index be4177caaba..223c18fafa8 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_source.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_run_source.htm @@ -11,7 +11,7 @@ -

    Specifying the location of source files

    +

    Specifying the location of source files

    You can specify the locations of source files used when debugging a C or C++ application. By default, this information is taken from your project.

    @@ -48,6 +48,6 @@ application. By default, this information is taken from your project.

    Run and Debug dialog box

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_search.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_search.htm index 70ded2d36ed..44b8ad2805e 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_search.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_search.htm @@ -10,7 +10,7 @@ -

    Searching for C/C++ elements

    +

    Searching for C/C++ elements

    It is recommended that you perform searches on successfully compiled programs to ensure the accuracy of search results. It is important to familiarize yourself with the correct search syntax @@ -33,7 +33,7 @@ include paths and symbols are correctly defined. For more information, see The info required to do a search is: -

    ComponentDescription
    Launch ModeThe Launch Mode combobox at the top of the dialog serves a dual purpose.
    - 1. It dictates the desired mode for the launch configuration being added, -and
    - 2. It establishes a 'mode' filter for the launch configurations that are -exposed to the user (for selection) in the area below the combobox
    +
    The Launch Mode combobox at the top of the dialog serves a dual purpose. +
      +
    1. + It dictates the desired mode for the launch configuration being added, +and
    2. +
    3. + It establishes a 'mode' filter for the launch configurations that are +exposed to the user (for selection) in the area below the combobox +
    4. +

    For example, when the 'debug' mode is selected, (1) only launch configurations that support being invoked in 'debug' mode appear. Also, (2) when the launch @@ -73,12 +78,12 @@ needs some clarification. First, realize that a launch configuration can be invoked from either the 'Debug' or the 'Run' actions (and some comparable 'profile' action in certain Eclipse configurations/products). That means, the launch group itself can be launched either in debug or run mode. When you check -the "Use default..." checkbox, you're saying: "launch this particular child -configuration in the mode that the parent (launch group) is launched with." If +the Use default... checkbox, you're saying: launch this particular child +configuration in the mode that the parent (launch group) is launched with. If you do not have that checkbox checked, then the child configurations will be invoked in whatever mode each individual child is configured with.

    -Note that "Use default..." control can allow you to create a launch group +Note that Use default... control can allow you to create a launch group that will not be successful. For example when one or more launch configurations selected cannot be launched in the mode dictated by launch group mode.

    +
    @@ -148,6 +148,6 @@ The info required to do a search is: C/C++ search page, Search dialog box


    IBM Copyright Statement - + \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_sel_search.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_sel_search.htm index 41a1bd98395..f43ec999a97 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_sel_search.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_sel_search.htm @@ -10,7 +10,7 @@ -

    Selection Searching for C/C++ elements

    +

    Selection Searching for C/C++ elements

    It is recommended that you perform searches on successfully compiled programs to ensure the accuracy of search results. It is important to familiarize yourself with the correct search syntax @@ -59,6 +59,6 @@ include paths and symbols are correctly defined. For more information, see

     

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_set_src_fold.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_set_src_fold.htm index 88c51b5e61c..d70f6e4d9e8 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_set_src_fold.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_set_src_fold.htm @@ -7,7 +7,7 @@ -

    Setting Source Folders

    +

    Setting Source Folders

    Note that source folders can only be currently used with Standard Make projects. Managed Make projects treat the entire project as a source folder.

    @@ -60,5 +60,5 @@ dialog box

     

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_shift_code.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_shift_code.htm index 9c106e5f028..840c8ec11b6 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_shift_code.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_shift_code.htm @@ -10,7 +10,7 @@ -

    Shifting lines of code to the right or left

    +

    Shifting lines of code to the right or left

    You can shift lines of code to the left or right in the C/C++ editor. You can change the tab width in the C/C++ editor preferences window. For more @@ -41,6 +41,6 @@ editor.

    C/C++ editor preferences

    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_show_proj_files.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_show_proj_files.htm index 7e68ffbeefc..a11845cf30d 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_show_proj_files.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_show_proj_files.htm @@ -10,7 +10,7 @@ -

    Displaying C/C++ file components in the C/C++ Projects view

    +

    Displaying C/C++ file components in the C/C++ Projects view

    File components are displayed in the C/C++ Projects view and in the Outline view. You can display or hide all file components in the C/C++ Projects view.

    @@ -49,6 +49,6 @@ view
    C/C++ editor preferences


    IBM Copyright Statement - +
    \ No newline at end of file diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_toggle.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_toggle.htm index c5caa0508d8..1571d6a35df 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_toggle.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_toggle.htm @@ -10,7 +10,7 @@ -

    Toggle Function Definition

    +

    Toggle Function Definition

    Toggle Function Definition moves a function definition inside an C/C++ source editor from one position to another and preserves correctness.

    @@ -31,6 +31,6 @@ the function definition (without comments) is considered valid for toggling.

    IBM Copyright Statement - +
    diff --git a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_variables.htm b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_variables.htm index 30b2fc5787e..0302356be57 100644 --- a/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_variables.htm +++ b/doc/org.eclipse.cdt.doc.user/tasks/cdt_t_variables.htm @@ -12,7 +12,7 @@ -

    Working with variables

    +

    Working with variables

    During a debug session, you can display variable types, and change or disable variable values.

    @@ -57,6 +57,6 @@ variable is specified as volatile.

    IBM Copyright Statement - +

    \ No newline at end of file From 5439a6af9eef8c9eeddf7ffcfd566ed33c6805b7 Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Sat, 5 May 2012 12:54:55 +0400 Subject: [PATCH 07/24] Bug 360314: OS awareness debug view Change-Id: I96b6df8bd5faa7e1da579d9e45580004170ac1e9 Reviewed-on: https://git.eclipse.org/r/5835 Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../META-INF/MANIFEST.MF | 3 +- .../icons/full/view16/osresources_view.gif | Bin 0 -> 262 bytes .../plugin.properties | 6 +- dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml | 7 + dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/pom.xml | 2 +- .../gdb/internal/ui/osview/ColumnLayout.java | 143 ++++ .../osview/ContentLabelProviderWrapper.java | 88 +++ .../dsf/gdb/internal/ui/osview/Messages.java | 39 ++ .../internal/ui/osview/Messages.properties | 22 + .../dsf/gdb/internal/ui/osview/OSData.java | 148 ++++ .../internal/ui/osview/OSResourcesView.java | 641 ++++++++++++++++++ .../osview/ResourceClassContributionItem.java | 210 ++++++ .../gdb/internal/ui/osview/SessionOSData.java | 292 ++++++++ .../dsf/gdb/service/GDBHardwareAndOS_7_5.java | 95 +++ .../gdb/service/GdbDebugServicesFactory.java | 6 + .../dsf/gdb/service/IGDBHardwareAndOS2.java | 67 ++ .../mi/service/command/CommandFactory.java | 17 + .../mi/service/command/commands/MIInfoOs.java | 52 ++ .../service/command/output/MIInfoOsInfo.java | 187 +++++ 19 files changed, 2022 insertions(+), 3 deletions(-) create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/view16/osresources_view.gif create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ColumnLayout.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ContentLabelProviderWrapper.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSData.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSResourcesView.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ResourceClassContributionItem.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/SessionOSData.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBHardwareAndOS_7_5.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBHardwareAndOS2.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIInfoOs.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInfoOsInfo.java diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/META-INF/MANIFEST.MF b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/META-INF/MANIFEST.MF index d4e6cc44ddc..8d3a7df5824 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/META-INF/MANIFEST.MF +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-SymbolicName: org.eclipse.cdt.dsf.gdb.ui;singleton:=true -Bundle-Version: 2.3.0.qualifier +Bundle-Version: 2.4.0.qualifier Bundle-Activator: org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin Bundle-Localization: plugin Require-Bundle: org.eclipse.ui, @@ -32,6 +32,7 @@ Export-Package: org.eclipse.cdt.dsf.gdb.internal.ui;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.commands;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.console;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.launching;x-friends:="org.eclipse.cdt.debug.gdbjtag.ui", + org.eclipse.cdt.dsf.gdb.internal.ui.osview;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.preferences;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.tracepointactions;x-internal:=true, org.eclipse.cdt.dsf.gdb.internal.ui.tracepoints;x-internal:=true, diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/view16/osresources_view.gif b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/view16/osresources_view.gif new file mode 100644 index 0000000000000000000000000000000000000000..71fc0a4f94135dd6ae1e5d9127a94f090814f6e8 GIT binary patch literal 262 zcmV+h0r~z%Nk%w1VGsZi0E8X@004ktahg?ptX_k#Zh)v}h_h6T(0!4(t*xxGvaz|j zxV^o+z`(!6#KX47&&I~a!N<+Q$IZmZ&dkiq(b3S<)YIJD+TPyW;NafR@BG>E{O9iZ z?ehBZ_51(-|NsC0A^s6Va%Ew3Wn>_CX>@2HM@dak03rDV0SW*g04x9i000mG5C8xL zZr~@1Kv{m~IT|UzrX%udB@JYnCSu9kl|R^Lp?Doifz}7ZSiCqTP7VtAG#ZSTiJ%+| z3fj^}DbP3!nvHtBHhjtwgM3bxzcrCOq%e6r7z`LAWo!c!4-FS1A_9$$0u>gEla7;? MZ;zLnn;#(nI}y2k@&Et; literal 0 HcmV?d00001 diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties index 6248385f21a..219fa516a90 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2008, 2010 Ericsson and others. +# Copyright (c) 2008, 2012 Ericsson and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ # Ericsson - initial API and implementation # IBM Corporation # Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) +# Vladimir Prus (Mentor Graphics) - OS Resources view (bug 360314) ############################################################################### pluginName=GDB DSF Debugger Integration UI providerName=Eclipse CDT @@ -47,3 +48,6 @@ activity.name = CDT DSF-GDB - GDB Debugging # Pretty Printing action.fetchMoreChildren.label=Fetch More Children + +# OS view +view.osresources.name=OS Resources diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml index b59f15537b5..81593486d9a 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/plugin.xml @@ -263,6 +263,13 @@ id="org.eclipse.cdt.dsf.gdb.ui.tracecontrol.view" name="%view.traceControl.name"> + + diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/pom.xml b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/pom.xml index a418ced7299..16b88d43c30 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/pom.xml +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/pom.xml @@ -11,7 +11,7 @@ ../../pom.xml - 2.3.0-SNAPSHOT + 2.4.0-SNAPSHOT org.eclipse.cdt.dsf.gdb.ui eclipse-plugin diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ColumnLayout.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ColumnLayout.java new file mode 100644 index 00000000000..f8727623645 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ColumnLayout.java @@ -0,0 +1,143 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; +import org.eclipse.jface.dialogs.IDialogSettings; + +/* Hold information about which columns in a table are visible, and what + * width they have. Stores that information inside preferences store. + */ +class ColumnLayout +{ + private String fResourceClass; + private Map fVisible = new HashMap(); + private Map fWidth = new HashMap(); + private Integer fSortColumn = null; + private Integer fSortDirection = null; + + private static IDialogSettings settings; + private static IDialogSettings getDialogSettings() + { + if (settings != null) + return settings; + + IDialogSettings topSettings = GdbUIPlugin.getDefault().getDialogSettings(); + settings = topSettings.getSection(ResourceClassContributionItem.class.getName()); + if (settings == null) { + settings = topSettings.addNewSection(ResourceClassContributionItem.class.getName()); + } + return settings; + } + + private static void setDefaultSetting(String key, boolean value) + { + IDialogSettings s = getDialogSettings(); + if (s.get(key) == null) + s.put(key, value); + } + + private static void setDefaultSetting(String key, int value) + { + IDialogSettings s = getDialogSettings(); + if (s.get(key) == null) + s.put(key, value); + } + + public ColumnLayout(String resourceClass) + { + fResourceClass = resourceClass; + } + + public boolean getVisible(String column) + { + if (fVisible.containsKey(column)) + return fVisible.get(column); + else + { + setDefaultSetting(columnKey(column, "v"), true); //$NON-NLS-1$ + boolean b = getDialogSettings().getBoolean(columnKey(column, "v")); //$NON-NLS-1$ + fVisible.put(column, b); + return b; + } + } + + public void setVisible(String column, boolean visible) + { + fVisible.put(column, visible); + getDialogSettings().put(columnKey(column, "v"), visible); //$NON-NLS-1$ + } + + public int getWidth(String column) + { + if (fWidth.containsKey(column)) + return fWidth.get(column); + else + { + setDefaultSetting(columnKey(column, "w"), -1); //$NON-NLS-1$ + int w = getDialogSettings().getInt(columnKey(column, "w")); //$NON-NLS-1$ + fWidth.put(column, w); + return w; + } + } + + public void setWidth(String column, int width) + { + fWidth.put(column, width); + getDialogSettings().put(columnKey(column, "w"), width); //$NON-NLS-1$ + } + + public int getSortColumn() + { + if (fSortColumn == null) + { + setDefaultSetting(globalKey("sortColumn"), 0); //$NON-NLS-1$ + fSortColumn = getDialogSettings().getInt(globalKey("sortColumn")); //$NON-NLS-1$ + } + return fSortColumn; + } + + public void setSortColumn(int column) + { + fSortColumn = column; + getDialogSettings().put(globalKey("sortColumn"), fSortColumn); //$NON-NLS-1$ + } + + public int getSortDirection() + { + if (fSortDirection == null) + { + setDefaultSetting(globalKey("sortDirection"), 1); //$NON-NLS-1$ + fSortDirection = getDialogSettings().getInt(globalKey("sortDirection")); //$NON-NLS-1$ + } + return fSortDirection; + } + + public void setSortDirection(int direction) + { + fSortDirection = direction; + getDialogSettings().put(globalKey("sortDirection"), fSortDirection); //$NON-NLS-1$ + } + + private String columnKey(String column, String what) + { + return "columnLayout." + fResourceClass + "." + column + "." + what; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + + private String globalKey(String what) + { + return "columnLayout." + fResourceClass + "." + what; //$NON-NLS-1$ //$NON-NLS-2$ + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ContentLabelProviderWrapper.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ContentLabelProviderWrapper.java new file mode 100644 index 00000000000..d322b096fd7 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ContentLabelProviderWrapper.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.graphics.Image; + +/** Helper class to change table and label provider of a TreeViewer in an atomic fashion. + * + * Suppose we want to change both content and label provider of existing TreeViewer. Right now, + * if we set either, TreeViewer will try a refresh, using one new provider and one old. This + * is obviously nonsensical -- for example if we set set new content provider, then old label provider + * will be asked to provide labels for elements it has no idea what to do with, or for columns beyond + * its range, etc. + * + * This class is wrapping our real content provider, and can be retargeted in one call -- after which + * refresh of TreeViewer sees consistent data. + * + * @since 2.4 + * */ +public class ContentLabelProviderWrapper +implements ITableLabelProvider, IStructuredContentProvider +{ + + public ContentLabelProviderWrapper(U realProvider) + { + this.realProvider = realProvider; + } + + public void setData(U realProvider) + { + this.realProvider = realProvider; + } + + @Override + public Image getColumnImage(Object obj, int index) { + return realProvider.getColumnImage(obj, index); + } + + @Override + public void addListener(ILabelProviderListener listener) { + realProvider.addListener(listener); + } + + @Override + public boolean isLabelProperty(Object element, String property) { + return realProvider.isLabelProperty(element, property); + } + + @Override + public void removeListener(ILabelProviderListener listener) { + realProvider.removeListener(listener); + } + + @Override + public String getColumnText(Object obj, int index) { + return realProvider.getColumnText(obj, index); + } + + @Override + public void inputChanged(Viewer v, Object oldInput, Object newInput) { + realProvider.inputChanged(v, oldInput, newInput); + } + + @Override + public void dispose() { + realProvider.dispose(); + } + + @Override + public Object[] getElements(Object parent) { + return realProvider.getElements(parent); + } + + private U realProvider; +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.java new file mode 100644 index 00000000000..ae708ab7f14 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import org.eclipse.osgi.util.NLS; + +/** + * @since 2.4 + */ +public class Messages extends NLS { + public static String OSView_3; + public static String OSView_4; + public static String OSView_5; + public static String OSView_6; + public static String OSView_7; + public static String OSView_8; + public static String OSView_9; + public static String OSView_10; + public static String OSView_11; + public static String OSView_12; + public static String OSView_13; + public static String OSView_14; + static { + // initialize resource bundle + NLS.initializeMessages(Messages.class.getName(), Messages.class); + } + + private Messages() { + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties new file mode 100644 index 00000000000..f57587aa280 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties @@ -0,0 +1,22 @@ +############################################################################### +# Copyright (c) 2011, 2012 Mentor Graphics and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Vladimir Prus (Mentor Graphics) - initial API and implementation +############################################################################### +OSView_3=Refresh +OSView_4=No debug session is selected. +OSView_5=Please select resource class. +OSView_6=Fetching data... +OSView_7=No data has been fetched yet. Fetch now. +OSView_8='Refresh (last fetched on' h:mm:ss ')' +OSView_9=Updating OS resources view +OSView_10=OS resources are not available using your target and GDB. +OSView_11=Determining available OS resource classes... +OSView_12=No data has been fetched yet. Target is busy. +OSView_13=Waiting for the debug session to initialize. +OSView_14=Objects from different debug sessions are selected. diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSData.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSData.java new file mode 100644 index 00000000000..0bbad09af74 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSData.java @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS2.IResourcesInformation; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.graphics.Image; + +/* Table data provider that exposes information about OS resources + * of specific class. Constructed from MI output. Once constructed, + * this class is immutable. + */ +class OSData +extends LabelProvider +implements ITableLabelProvider, IStructuredContentProvider +{ + private IResourcesInformation data; + private boolean[] columnIsInteger; + private List remap; + + public OSData(String resourceClass, IResourcesInformation data) { + this.data = data; + determineColumnTypes(); + + remap = new ArrayList(data.getColumnNames().length); + for (int i = 0; i < data.getColumnNames().length; ++i) + remap.add(i); + + if (resourceClass.equals("processes")) //$NON-NLS-1$ + sendToEnd("Command"); //$NON-NLS-1$ + + if (resourceClass.equals("threads")) //$NON-NLS-1$ + sendToEnd("Command"); //$NON-NLS-1$ + + if (resourceClass.equals("modules")) //$NON-NLS-1$ + sendToEnd("Dependencies"); //$NON-NLS-1$ + } + + // Determine column types, for the purpose of proper sorting + private void determineColumnTypes() + { + String[] columnNames = data.getColumnNames(); + String[][] content = data.getContent(); + + columnIsInteger = new boolean[columnNames.length]; + + boolean[] columnHasInteger = new boolean[columnNames.length]; + boolean[] columnHasOther = new boolean[columnNames.length]; + + for (int i = 0; i < content.length; ++i) { + for (int j = 0; j < content[i].length; ++j) { + if (!columnHasOther[j]) + { + try { + Integer.parseInt(content[i][j]); + columnHasInteger[j] = true; + } + catch(NumberFormatException e) { + columnHasOther[j] = true; + } + catch(Throwable e) { + e.printStackTrace(); + } + } + + } + } + + for (int j = 0; j < data.getColumnNames().length; ++j) { + columnIsInteger[j] = columnHasInteger[j] && !columnHasOther[j]; + } + } + + /* Make column named 'column' appear last in UI. */ + private void sendToEnd(String column) + { + // Find index in the remap array (which is equal to index in UI) + // at which column named 'column' is found. + int index = -1; + for (int i = 0; i < remap.size(); ++i) + if (data.getColumnNames()[remap.get(i)].equals(column)) { + index = i; + break; + } + if (index == -1) + return; + + // Move the element to the end of the list + remap.add(remap.remove(index)); + } + + public int getColumnCount() + { + return remap.size(); + } + + public String getColumnName(int i) + { + return data.getColumnNames()[remap.get(i)]; + } + + public boolean getColumnIsInteger(int j) { + return columnIsInteger[remap.get(j)]; + } + + @Override + public String getColumnText(Object obj, int index) { + return ((String[]) obj)[remap.get(index)]; + } + + @Override + public Image getColumnImage(Object obj, int index) { + return getImage(obj); + } + + @Override + public Image getImage(Object obj) { + return null; + } + + @Override + public void inputChanged(Viewer v, Object oldInput, Object newInput) { + } + + @Override + public void dispose() { + } + + @Override + public Object[] getElements(Object parent) { + return data.getContent(); + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSResourcesView.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSResourcesView.java new file mode 100644 index 00000000000..5e5f2a7cc5a --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/OSResourcesView.java @@ -0,0 +1,641 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.Query; +import org.eclipse.cdt.dsf.datamodel.DMContexts; +import org.eclipse.cdt.dsf.datamodel.IDMContext; +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService; +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; +import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; +import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch; +import org.eclipse.cdt.dsf.service.DsfServicesTracker; +import org.eclipse.cdt.dsf.service.DsfSession; +import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.debug.ui.contexts.DebugContextEvent; +import org.eclipse.debug.ui.contexts.IDebugContextListener; +import org.eclipse.debug.ui.contexts.IDebugContextManager; +import org.eclipse.debug.ui.contexts.IDebugContextService; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerComparator; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.part.ViewPart; +import org.eclipse.ui.progress.UIJob; +import org.osgi.framework.Bundle; + +/** + * @since 2.4 + */ +public class OSResourcesView extends ViewPart implements DsfSession.SessionEndedListener { + + private final static String FETCH_LINK_TAG = "fetch"; //$NON-NLS-1$ + + // The data model for the selected session, or null if no session is + // selected. + private SessionOSData fSessionData; + private Map fSessionDataCache = new HashMap(); + // The data presently shown by table viewer. + private OSData fTableShownData = null; + // The data which was used to populate column selector menu + private OSData fMenuShownData = null; + private String fResourceClass = null; + + // Indicates that we've selected objects from different debug sessions. + boolean fMultiple = false; + + + // UI objects + private TableViewer fViewer; + private Comparator fComparator; + private Composite fNothingLabelContainer; + private Link fNothingLabel; + private ResourceClassContributionItem fResourceClassEditor; + private Action fRefreshAction; + + // Map from resource class name to table column layout. + private Map fColumnLayouts = new HashMap(); + + private ColumnLayout fColumnLayout = null; + + private IDebugContextListener fDebugContextListener; + + @Override + public void createPartControl(Composite xparent) { + + Composite parent = new Composite(xparent, SWT.NONE); + GridLayout topLayout = new GridLayout(1, false); + topLayout.marginWidth = 0; + topLayout.marginHeight = 0; + parent.setLayout(topLayout); + + fViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL + | SWT.V_SCROLL); + GridData viewerData = new GridData(GridData.FILL_BOTH); + viewerData.exclude = true; + fViewer.getControl().setLayoutData(viewerData); + + fViewer.setComparator(fComparator = new Comparator()); + + Table table = fViewer.getTable(); + table.setHeaderVisible(true); + table.setVisible(false); + + fNothingLabelContainer = new Composite(parent, SWT.NONE); + + GridData nothingLayout = new GridData(SWT.FILL, SWT.FILL, true, true); + fNothingLabelContainer.setLayoutData(nothingLayout); + + GridLayout containerLayout = new GridLayout(1, false); + fNothingLabelContainer.setLayout(containerLayout); + + fNothingLabel = new Link(fNothingLabelContainer, SWT.BORDER); + fNothingLabel.setText(Messages.OSView_4); + fNothingLabel.setBackground(fNothingLabel.getDisplay().getSystemColor( + SWT.COLOR_LIST_BACKGROUND)); + fNothingLabel.addListener (SWT.Selection, new Listener () { + @Override + public void handleEvent(Event event) { + if (event.text.equals("fetch")) //$NON-NLS-1$ + if (fSessionData != null && fResourceClass != null) + fSessionData.fetchData(fResourceClass); + } + }); + fNothingLabelContainer.setBackground(fNothingLabel.getBackground()); + + GridData nothingLabelLayout = new GridData(SWT.CENTER, SWT.TOP, true, false); + fNothingLabel.setLayoutData(nothingLabelLayout); + + fResourceClassEditor = new ResourceClassContributionItem(); + fResourceClassEditor.setListener(new ResourceClassContributionItem.Listener() { + + @Override + public void resourceClassChanged(String newClass) { + fResourceClass = newClass; + // Since user explicitly changed the class, initiate fetch immediately. + fSessionData.fetchData(fResourceClass); + // Do not call 'update()' here. fetchData call above will notify + // us at necessary moments. + } + }); + IActionBars bars = getViewSite().getActionBars(); + bars.getToolBarManager().add(fResourceClassEditor); + + fRefreshAction = new Action() { + @Override + public void run() { + if (fSessionData != null && fResourceClass != null) + fSessionData.fetchData(fResourceClass); + } + }; + fRefreshAction.setText(Messages.OSView_3); + fRefreshAction.setToolTipText(Messages.OSView_3); + try { + Bundle bundle= Platform.getBundle("org.eclipse.ui"); //$NON-NLS-1$ + URL url = bundle.getEntry("/"); //$NON-NLS-1$ + url = new URL(url, "icons/full/elcl16/refresh_nav.gif"); //$NON-NLS-1$ + ImageDescriptor candidate = ImageDescriptor.createFromURL(url); + if (candidate != null && candidate.getImageData() != null) { + fRefreshAction.setImageDescriptor(candidate); + } + } catch (Exception e) { + } + bars.getToolBarManager().add(fRefreshAction); + bars.updateActionBars(); + + fResourceClass = fResourceClassEditor.getResourceClassId(); + + setupContextListener(); + DsfSession.addSessionEndedListener(this); + } + + private void setupContextListener() { + IDebugContextManager contextManager = DebugUITools.getDebugContextManager(); + IDebugContextService contextService = contextManager + .getContextService(getSite().getWorkbenchWindow()); + + fDebugContextListener = new IDebugContextListener() { + + @Override + public void debugContextChanged(DebugContextEvent event) { + + if ((event.getFlags() & DebugContextEvent.ACTIVATED) != 0) { + ISelection s = event.getContext(); + setDebugContext(s); + } + } + }; + contextService.addDebugContextListener(fDebugContextListener); + setDebugContext(contextService.getActiveContext()); + } + + @Override + public void dispose() { + super.dispose(); + + IDebugContextManager contextManager = DebugUITools.getDebugContextManager(); + IDebugContextService contextService = contextManager + .getContextService(getSite().getWorkbenchWindow()); + contextService.removeDebugContextListener(fDebugContextListener); + + setDebugContext((ICommandControlDMContext)null); + DsfSession.removeSessionEndedListener(this); + } + + private void setDebugContext(ISelection s) { + + ICommandControlDMContext context = null; + fMultiple = false; + if (s instanceof IStructuredSelection) { + IStructuredSelection ss = (IStructuredSelection) s; + if (ss.size() > 0) { + @SuppressWarnings("rawtypes") + Iterator i = ss.iterator(); + context = getCommandControlContext(i.next()); + while (i.hasNext()) { + ICommandControlDMContext nextContext = getCommandControlContext(i.next()); + if (nextContext == null && context != null + || nextContext != null && context == null + || nextContext != null && context != null && !nextContext.equals(context)) + { + context = null; + fMultiple = true; + break; + } + } + } + } + + setDebugContext(context); + } + + private ICommandControlDMContext getCommandControlContext(Object obj) { + IDMContext context = null; + if (obj instanceof IDMVMContext) + context = ((IDMVMContext)obj).getDMContext(); + else if (obj instanceof GdbLaunch) { + GdbLaunch l = (GdbLaunch)obj; + final DsfServicesTracker tracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), l.getSession().getId()); + Query contextQuery = new Query() { + @Override + protected void execute(DataRequestMonitor rm) { + ICommandControlService commandControl = tracker.getService(ICommandControlService.class); + tracker.dispose(); + if (commandControl != null) + { + rm.setData(commandControl.getContext()); + } + rm.done(); + } + }; + l.getSession().getExecutor().submit(contextQuery); + try { + context = contextQuery.get(); + } catch (Exception e) { + } + } + return DMContexts.getAncestorOfType(context, ICommandControlDMContext.class); + } + + private void setDebugContext(ICommandControlDMContext context) + { + DsfSession newSession = null; + SessionOSData newSessionData = null; + + if (context != null) + { + newSession = DsfSession.getSession(context.getSessionId()); + } + + if (newSession != null) + { + newSessionData = fSessionDataCache.get(newSession.getId()); + if (newSessionData == null) + { + newSessionData = new SessionOSData(newSession, context); + fSessionDataCache.put(newSession.getId(), newSessionData); + + newSessionData.setUIListener(new SessionOSData.Listener() { + + @Override + public void update() { + // Note that fSessionData always calls the listener in + // UI thread, so we can directly call 'update' here. + OSResourcesView.this.update(); + } + }, fViewer.getControl()); + } + } + + + if (newSessionData != fSessionData) + { + fSessionData = newSessionData; + update(); + } + } + + @Override + public void sessionEnded(DsfSession session) { + String id = session.getId(); + SessionOSData data = fSessionDataCache.remove(id); + if (data != null) { + data.dispose(); + } + } + + private void update() { + + if (fViewer == null || fViewer.getControl() == null) + return; + + if (fViewer.getControl().isDisposed()) + return; + + if (fSessionData == null) + { + hideTable(fMultiple ? Messages.OSView_14 : Messages.OSView_4); + fResourceClassEditor.setEnabled(false); + fRefreshAction.setEnabled(false); + return; + } + + boolean enable = fSessionData.canFetchData(); + fRefreshAction.setEnabled(enable); + fResourceClass = fResourceClassEditor.updateClasses(fSessionData.getResourceClasses()); + fResourceClassEditor.setEnabled(enable); + + if (!fSessionData.osResourcesSupported()) { + fRefreshAction.setEnabled(false); + fResourceClassEditor.setEnabled(false); + hideTable(Messages.OSView_10); + return; + } + + if (fSessionData.waitingForSessionInitialization()) { + fRefreshAction.setEnabled(false); + fResourceClassEditor.setEnabled(false); + hideTable(Messages.OSView_13); + return; + } + + if (fSessionData.fetchingClasses()) { + fRefreshAction.setEnabled(false); + fResourceClassEditor.setEnabled(false); + hideTable(Messages.OSView_11); + return; + } + + if (fResourceClass == null) + { + fRefreshAction.setEnabled(false); + fResourceClassEditor.setEnabled(true); + hideTable(Messages.OSView_5); + return; + } + + + final OSData data = fSessionData.existingData(fResourceClass); + + if (fSessionData.fetchingContent()) + { + hideTable(Messages.OSView_6); + } + else if (data == null) + { + if (fSessionData.canFetchData()) + hideTable(NLS.bind(Messages.OSView_7, FETCH_LINK_TAG)); + else + hideTable(Messages.OSView_12); + } + else + { + SimpleDateFormat format = new SimpleDateFormat(Messages.OSView_8); + fRefreshAction.setToolTipText(format.format(fSessionData.timestamp(fResourceClass))); + if (data != fTableShownData) + { + Job job = new UIJob(Messages.OSView_9) { + @Override + public IStatus runInUIThread(IProgressMonitor monitor) { + fTableShownData = data; + populateTable(data); + showTable(); + return Status.OK_STATUS; + } + + }; + job.setPriority(Job.INTERACTIVE); + job.schedule(); + } + else + { + assert fViewer.getTable().getColumnCount() == data.getColumnCount(); + showTable(); + } + } + fRefreshAction.setEnabled(fSessionData.canFetchData()); + fResourceClassEditor.setEnabled(fSessionData.canFetchData()); + + } + + /* Hide the table that would show OS awareness data if it were available. Display + * 'message' instead. + */ + private void hideTable(String message) { + setContentDescription(""); //$NON-NLS-1$ + fViewer.getControl().setVisible(false); + ((GridData) fViewer.getControl().getLayoutData()).exclude = true; + fNothingLabelContainer.setVisible(true); + ((GridData) fNothingLabelContainer.getLayoutData()).exclude = false; + fNothingLabelContainer.getParent().layout(); + fNothingLabel.setText(message); + fNothingLabelContainer.layout(); + + // If the table is not shown, we don't want the menu to have stale + // list of columns to select from. + IActionBars bars = getViewSite().getActionBars(); + bars.getMenuManager().removeAll(); + bars.updateActionBars(); + fMenuShownData = null; + } + + private void showTable() { + assert fTableShownData != null; + + fViewer.getControl().setVisible(true); + ((GridData) fViewer.getControl().getLayoutData()).exclude = false; + fNothingLabelContainer.setVisible(false); + ((GridData) fNothingLabelContainer.getLayoutData()).exclude = true; + fNothingLabelContainer.getParent().layout(); + + populateViewMenu(fTableShownData); + } + + private void populateTable(final OSData data) + { + final Table table = fViewer.getTable(); + + while (table.getColumnCount() > 0) + table.getColumns()[0].dispose(); + + fColumnLayout = fColumnLayouts.get(fResourceClass); + if (fColumnLayout == null) + { + fColumnLayout = new ColumnLayout(fResourceClass); + fColumnLayouts.put(fResourceClass, fColumnLayout); + } + + for (int i = 0; i < data.getColumnCount(); ++i) { + final String cn = data.getColumnName(i); + final TableColumn c = new TableColumn(table, SWT.LEFT); + c.setText(cn); + + c.addListener(SWT.Resize, new Listener() { + + @Override + public void handleEvent(Event event) { + fColumnLayout.setWidth(cn, c.getWidth()); + } + }); + + final int final_index = i; + c.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + int dir = table.getSortDirection(); + if (table.getSortColumn() == c) { + dir = dir == SWT.UP ? SWT.DOWN : SWT.UP; + } else { + dir = SWT.DOWN; + } + table.setSortDirection(dir); + table.setSortColumn(c); + fComparator.configure(final_index, data); + fComparator.setDirection(dir == SWT.DOWN ? 1 : -1); + fColumnLayout.setSortColumn(final_index); + fColumnLayout.setSortDirection(dir == SWT.DOWN ? 1 : -1); + fViewer.refresh(); + } + }); + } + + populateViewMenu(data); + + int sortColumn = fColumnLayout.getSortColumn(); + if (sortColumn < data.getColumnCount()) + { + fComparator.configure(sortColumn, data); + } + fComparator.setDirection(fColumnLayout.getSortDirection()); + + fViewer.getTable().setEnabled(true); + + + if (fViewer.getContentProvider() == null) + { + ContentLabelProviderWrapper wrapper = + new ContentLabelProviderWrapper(data); + fViewer.setContentProvider(wrapper); + fViewer.setLabelProvider(wrapper); + } + else + { + // Retarget current content/label providers in atomic fashion. See comments + // on ContentLabelProviderWrapper. + @SuppressWarnings("unchecked") + ContentLabelProviderWrapper wrapper = (ContentLabelProviderWrapper)fViewer.getContentProvider(); + wrapper.setData(data); + } + fViewer.setInput(getViewSite()); + fViewer.getControl().setVisible(true); + + for (int i = 0; i < fViewer.getTable().getColumnCount(); ++i) + { + TableColumn col = fViewer.getTable().getColumns()[i]; + String cn = col.getText(); + + if (i == sortColumn) { + table.setSortDirection(fColumnLayout.getSortDirection() == 1 ? SWT.DOWN : SWT.UP); + table.setSortColumn(col); + } + + if (fColumnLayout.getVisible(cn)) + { + int w = fColumnLayout.getWidth(cn); + if (w > 0) + col.setWidth(w); + else + col.pack(); + } + else + { + col.setWidth(0); + col.setResizable(false); + } + } + } + + private void populateViewMenu(final OSData data) { + + assert data.getColumnCount() == fViewer.getTable().getColumnCount(); + + if (data == fMenuShownData) + return; + + IActionBars bars = getViewSite().getActionBars(); + bars.getMenuManager().setVisible(true); + bars.getMenuManager().removeAll(); + + for (int i = 0; i < data.getColumnCount(); ++i) { + final String cn = data.getColumnName(i); + final TableColumn c = fViewer.getTable().getColumns()[i]; + + Action a = new Action(cn, IAction.AS_CHECK_BOX) { + @Override + public void run() { + if (isChecked()) { + int w = fColumnLayout.getWidth(cn); + if (w > 0) + c.setWidth(w); + else + c.pack(); + c.setResizable(true); + } else { + int w = c.getWidth(); + c.setWidth(0); + // Make sure we remember the width the column + // had before hiding. + fColumnLayout.setWidth(cn, w); + c.setResizable(false); + } + fColumnLayout.setVisible(cn, isChecked()); + } + }; + a.setChecked(fColumnLayout.getVisible(cn)); + a.setText(cn); + bars.getMenuManager().add(a); + } + bars.updateActionBars(); + + fMenuShownData = data; + } + + class Comparator extends ViewerComparator + { + private int fColumn = 0; + private OSData fData; + private boolean fInteger = false; + private int fDirection = 1; + + public void configure(int column, OSData data) + { + fColumn = column; + fData = data; + fInteger = data.getColumnIsInteger(column); + } + + public void setDirection(int direction) + { + assert direction == 1 || direction == -1; + fDirection = direction; + } + + @Override + public int compare(Viewer viewer, Object xe1, Object xe2) { + + String v1 = fData.getColumnText(xe1, fColumn); + String v2 = fData.getColumnText(xe2, fColumn); + if (fInteger) { + Integer i1 = Integer.parseInt(v1); + Integer i2 = Integer.parseInt(v2); + return fDirection*(i1 - i2); + } else { + return fDirection*(v1.compareTo(v2)); + } + } + }; + + @Override + public void setFocus() { + fViewer.getControl().setFocus(); + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ResourceClassContributionItem.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ResourceClassContributionItem.java new file mode 100644 index 00000000000..68c37dfd91a --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/ResourceClassContributionItem.java @@ -0,0 +1,210 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; +import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS2.IResourceClass; +import org.eclipse.jface.action.ContributionItem; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; + +/** + * @since 2.4 + */ +public class ResourceClassContributionItem extends ContributionItem { + + // In some places below, we are trying to determine size hint for Combo, given the list of + // content. However, while we can determine width of content, we don't know how much width + // the combobox itself is adding. This constant is our guess. + private static final int COMBO_TRIM_WIDTH = 64; + + interface Listener + { + void resourceClassChanged(String newClass); + } + + private Combo fResourceClassCombo; + private IResourceClass[] resourceClasses = new IResourceClass[0]; + private String fResourceClassId = null; + + private Listener fListener; + private boolean blockListener = false; + private ToolItem toolItem; + + private boolean enabled = true; + + private static IDialogSettings settings; + private static IDialogSettings getDialogSettings() + { + if (settings != null) + return settings; + + IDialogSettings topSettings = GdbUIPlugin.getDefault().getDialogSettings(); + settings = topSettings.getSection(ResourceClassContributionItem.class.getName()); + if (settings == null) { + settings = topSettings.addNewSection(ResourceClassContributionItem.class.getName()); + } + return settings; + } + + public void setListener(Listener listener) { + + fListener = listener; + } + + public void setEnabled(boolean enable) { + // It appears that every update of action bars will call 'fill' action below, creating + // combo. So, we want to keep 'enabled' state as member variable, to make sure it is kept + // if combo is recreated. + enabled = enable; + if (fResourceClassCombo != null) + fResourceClassCombo.setEnabled(enable); + } + + public String updateClasses(IResourceClass[] resourceClasses) { + + boolean different = false; + if (this.resourceClasses.length != resourceClasses.length) + different = true; + else for (int i = 0; i < this.resourceClasses.length; ++i) { + if (!this.resourceClasses[i].getId().equals(resourceClasses[i].getId()) + || !this.resourceClasses[i].getHumanDescription().equals(resourceClasses[i].getHumanDescription())) + { + different = true; + break; + } + } + + if (!different) + return fResourceClassId; + + this.resourceClasses = resourceClasses; + + fResourceClassCombo.removeAll(); + final int width = populateCombo(); + // Now change the width. Call to setWidth causes relayout automatically. + // IMPORTANT: the visibility check is critical. Without it, we appear to have hit + // an SWT/Gtk bug whenever a debug session and a previously use OS resources view + // is not shown. The bug manifests by 100% CPU consumption inside event loop, and + // it further blocks asyncExec runnables from ever executing. I suppose it might + // be specific to relayout of invisible toolbar. + + // If we're invisible, we don't arrange for relayout to happen when the view becomes + // available, because it is not exactly trivial (we need to events on the right control) + // and it only matters when we start a new session and it has a different set of + // resource classes and that requires longer combobox. + if (toolItem.getParent().isVisible()) + toolItem.setWidth(width); + + return fResourceClassId; + } + + /** Populate the combobox with resource classes. Return the width the + * combobox must have, including any trim. If there are no resource classes, + * returns some reasonable default width. + */ + private int populateCombo() { + + int width = 0; + String lastResourceClassId = getDialogSettings().get("resourceClass"); //$NON-NLS-1$ + int index = -1; + int i = 0; + GC gc = new GC(fResourceClassCombo); + for (i = 0; i < resourceClasses.length; ++i) { + String description = resourceClasses[i].getHumanDescription(); + width = Math.max(width, gc.textExtent(description).x); + fResourceClassCombo.add(description); + if (resourceClasses[i].getId().equals(lastResourceClassId)) + index = i; + } + + + + if (index != -1) { + fResourceClassId = lastResourceClassId; + blockListener = true; + fResourceClassCombo.select(index); + blockListener = false; + } + + if (width == 0) { + // We have some hints what the longest element in combo will be. Even if it's different + // in new GDB version, no problem -- the combo will be resized when it's populated. + width = gc.textExtent("Shared memory regions").x; //$NON-NLS-1$ + } + + // Because there's no way whatsoever to set the width + // of the combobox list, only complete length, we just add + // random padding. + width = width + COMBO_TRIM_WIDTH; + + return width; + } + + + public String getResourceClassId() { + return fResourceClassId; + } + + @Override + public void fill(ToolBar parent, int toolbarItemIndex) { + + fResourceClassCombo = new Combo(parent, SWT.NONE); + fResourceClassCombo.setEnabled(enabled); + int width = populateCombo(); + + fResourceClassCombo.addSelectionListener(new SelectionListener() { + + @SuppressWarnings({ "null"}) + @Override + public void widgetSelected(SelectionEvent e) { + String description = fResourceClassCombo.getText(); + String id = null; + for (int i = 0; i < resourceClasses.length; ++i) + if (resourceClasses[i].getHumanDescription().equals(description)) { + id = resourceClasses[i].getId(); + break; + } + + // id is never null here, unless we messed up our data structures. + assert id != null; + if (id != null && !id.equals(fResourceClassId)) + { + fResourceClassId = id; + getDialogSettings().put("resourceClass", id); //$NON-NLS-1$ + if (fListener != null && !blockListener) + fListener.resourceClassChanged(fResourceClassId); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + + + toolItem = new ToolItem(parent, SWT.SEPARATOR); + toolItem.setControl(fResourceClassCombo); + toolItem.setWidth(width); + } + + @Override + public boolean isDynamic() { + return false; + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/SessionOSData.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/SessionOSData.java new file mode 100644 index 00000000000..bfcbed340ea --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/SessionOSData.java @@ -0,0 +1,292 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.internal.ui.osview; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; +import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.DsfExecutor; +import org.eclipse.cdt.dsf.concurrent.DsfRunnable; +import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent; +import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerResumedDMEvent; +import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerSuspendedDMEvent; +import org.eclipse.cdt.dsf.debug.service.IRunControl.IResumedDMEvent; +import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent; +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; +import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; +import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS2; +import org.eclipse.cdt.dsf.mi.service.IMIRunControl; +import org.eclipse.cdt.dsf.service.DsfServiceEventHandler; +import org.eclipse.cdt.dsf.service.DsfServicesTracker; +import org.eclipse.cdt.dsf.service.DsfSession; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.statushandlers.StatusManager; +import org.osgi.framework.BundleContext; + +/** Responsible for fetching and storing OS awareness data for a + * specific DSF session. + * + * @since 2.4 + */ +public class SessionOSData { + + private DsfSession fSession; + private DsfServicesTracker fTracker; + private IGDBHardwareAndOS2 fHardwareOs; + private ICommandControlDMContext fContext; + + private IGDBHardwareAndOS2.IResourceClass[] fResourceClasses = new IGDBHardwareAndOS2.IResourceClass[0]; + private Map fExistingData = new HashMap(); + private Map fTimestamp = new HashMap(); + + private Listener fUIListener; + private Control fUIControl; + + private boolean fWaitingForSession = true; + private boolean fSupported = true; + private boolean fAcceptingCommands = false; + private boolean fFetchingClasses = false; + private boolean fFetchingContent = false; + + + public SessionOSData(DsfSession session, final ICommandControlDMContext executionContext) + { + fSession = session; + BundleContext c = GdbUIPlugin.getDefault().getBundle().getBundleContext(); + fTracker = new DsfServicesTracker(c, fSession.getId()); + fContext = executionContext; + + final DsfExecutor executor = fSession.getExecutor(); + executor.submit(new DsfRunnable() { + + @Override + public void run() { + + IMIRunControl runControl = fTracker.getService(IMIRunControl.class); + fAcceptingCommands = runControl.isTargetAcceptingCommands(); + + fSession.addServiceEventListener(SessionOSData.this, null); + + fHardwareOs = fTracker.getService(IGDBHardwareAndOS2.class); + + if (fHardwareOs == null) { + fSupported = false; + notifyUI(); + return; + } + + if (fHardwareOs.isAvailable()) { + fetchClasses(); + } + } + }); + } + + @ConfinedToDsfExecutor("") + private void fetchClasses() + { + fWaitingForSession = false; + fFetchingClasses = true; + fHardwareOs.getResourceClasses(fContext, new DataRequestMonitor(fSession.getExecutor(), null) { + @Override + @ConfinedToDsfExecutor("fExecutor") + protected void handleCompleted() { + + if (isSuccess()) + { + fResourceClasses = getData(); + if (fResourceClasses.length == 0) + fSupported = false; + } + else + { + fSupported = false; + } + fFetchingClasses = false; + notifyUI(); + } + }); + } + + @DsfServiceEventHandler + public void eventDispatched(DataModelInitializedEvent e) { + // If we see this event, it necessary means that by the time we've set event listener, + // isAvailable() was returning false, so we need to fetch classes now. + if (fHardwareOs != null) + fetchClasses(); + } + + public boolean waitingForSessionInitialization() + { + return fWaitingForSession; + } + + public boolean osResourcesSupported() + { + return fSupported; + } + + public void dispose() + { + fSession.removeServiceEventListener(SessionOSData.this); + fTracker.dispose(); + } + + public IGDBHardwareAndOS2.IResourceClass[] getResourceClasses() + { + return fResourceClasses; + } + + /** Returns OS awareness data for given resource class that + * was previously fetched, or null if none was ever fetched. + */ + public OSData existingData(String resourceClass) + { + return fExistingData.get(resourceClass); + } + + /** Returns the timestamp at which data for 'resourceClass' have + * been obtained. + * @pre existingData(resourceClass) != null + */ + public Date timestamp(String resourceClass) + { + return fTimestamp.get(resourceClass); + } + + /** Returns true if fresh data can be fetched at this time. + * Generally, it's possible if we're not fetching data already, + * and if GDB is accepting commands right now. + * + */ + public boolean canFetchData() + { + return fAcceptingCommands && !fFetchingContent; + } + + public boolean fetchingClasses() + { + return fFetchingClasses; + } + + /** Returns true if we're presently fetching data. This can + * be used to provide some feedback to the user. + */ + public boolean fetchingContent() + { + return fFetchingContent; + } + + /** Fetches up-to-date data for resourceClass. Listeners will be + * informed when the new data is available. */ + public void fetchData(final String resourceClass) + { + fFetchingContent = true; + notifyUI(); + + final DsfExecutor executor = fSession.getExecutor(); + executor.submit(new DsfRunnable() { + + @Override + public void run() { + fHardwareOs.getResourcesInformation(fContext, resourceClass, new DataRequestMonitor(executor, null) { + + @Override + @ConfinedToDsfExecutor("fExecutor") + protected void handleCompleted() { + + fFetchingContent = false; + + if (isSuccess()) + { + OSData data = new OSData(resourceClass, getData()); + fExistingData.put(resourceClass, data); + fTimestamp.put(resourceClass, new Date()); + } + else + { + StatusManager.getManager().handle(getStatus(), StatusManager.BLOCK); + } + notifyUI(); + } + }); + } + }); + + + } + + public interface Listener + { + void update(); + } + + /** Setup the listener that will be notified whenever externally + * visible state changes. The listener will always be invoked + * in the UI thread. 'control' is the control associated with + * the listener. The listener will not be called if the control + * is disposed. + */ + public void setUIListener(Listener listener, Control control) + { + fUIListener = listener; + fUIControl = control; + } + + private void notifyUI() + { + + final Control c = fUIControl; + if (c != null && !c.isDisposed()) + // There be dragons: if you try to use c.getDisplay() below, then this Runnable will not + // run until resource view is actually visible. And it will also block other interesting + // async/job runnables, like perspective switch runnable using during debug launch, + // causing launch to be stuck at random point. + // + Display.getDefault().asyncExec(new Runnable() { + + @Override + public void run() { + + if (!c.isDisposed()) + fUIListener.update(); + } + }); + + } + + @DsfServiceEventHandler + public void eventDispatched(IResumedDMEvent e) { + if (e instanceof IContainerResumedDMEvent) { + // This event is raised only in all-stop. It does not + // seem to be possible to issue -info-os in all-stop, + // regardless of whether target-async is in effect, and + // according to DSF folks, all-stop+target-async will + // not work anyway. So, we assume that no commands + // can be issued right now. + fAcceptingCommands = false; + notifyUI(); + } + } + + @DsfServiceEventHandler + public void eventDispatched(ISuspendedDMEvent e) { + if (e instanceof IContainerSuspendedDMEvent) { + fAcceptingCommands = true; + notifyUI(); + } + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBHardwareAndOS_7_5.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBHardwareAndOS_7_5.java new file mode 100644 index 00000000000..537c321216a --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBHardwareAndOS_7_5.java @@ -0,0 +1,95 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.service; + +import java.util.Hashtable; + +import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; +import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor; +import org.eclipse.cdt.dsf.concurrent.RequestMonitor; +import org.eclipse.cdt.dsf.datamodel.IDMContext; +import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin; +import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl; +import org.eclipse.cdt.dsf.mi.service.command.CommandFactory; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfoOsInfo; +import org.eclipse.cdt.dsf.service.DsfSession; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +/** + * @since 4.2 + */ +public class GDBHardwareAndOS_7_5 extends GDBHardwareAndOS implements IGDBHardwareAndOS2 { + + public GDBHardwareAndOS_7_5(DsfSession session) { + super(session); + } + + @Override + public boolean isAvailable() { + return getSessionInitializationComplete(); + } + + @Override + public void initialize(final RequestMonitor requestMonitor) { + super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { + @Override + protected void handleSuccess() { + register(new String[] { IGDBHardwareAndOS2.class.getName() }, + new Hashtable()); + + requestMonitor.done(); + } + }); + } + + @Override + public void getResourceClasses(final IDMContext dmc, final DataRequestMonitor rm) { + + IGDBControl control = getServicesTracker().getService(IGDBControl.class); + if (control == null) { + rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INVALID_STATE, "Service not available", null)); //$NON-NLS-1$ + return; + } + + CommandFactory factory = control.getCommandFactory(); + control.queueCommand(factory.createMIInfoOS(dmc), new DataRequestMonitor(getExecutor(), rm) { + @Override + @ConfinedToDsfExecutor("fExecutor") + protected void handleSuccess() { + rm.setData(getData().getResourceClasses()); + rm.done(); + } + }); + } + + @Override + public void getResourcesInformation(final IDMContext dmc, final String resourceClass, final DataRequestMonitor rm) { + + IGDBControl control = getServicesTracker().getService(IGDBControl.class); + if (control == null) { + rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INVALID_STATE, "Service not available", null)); //$NON-NLS-1$ + return; + } + + CommandFactory factory = control.getCommandFactory(); + control.queueCommand(factory.createMIInfoOS(dmc, resourceClass), new DataRequestMonitor(getExecutor(), rm) { + + @Override + protected void handleSuccess() { + rm.setData(getData().getResourcesInformation()); + rm.done(); + } + }); + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java index 3d33d62131e..27501dff4ee 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java @@ -11,6 +11,7 @@ * Onur Akdemir (TUBITAK BILGEM-ITI) - Multi-process debugging (Bug 237306) * Marc Khouzam (Ericsson) - Support for GDB 7.4 (Bug 367788) * Marc Khouzam (Ericsson) - Include IGDBHardware service for the multicore visualizer (Bug 335027) + * Vladimir Prus (Mentor Graphics) - Support for OS resources. *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.service; @@ -62,6 +63,8 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory { public static final String GDB_7_3_VERSION = "7.3"; //$NON-NLS-1$ /** @since 4.1 */ public static final String GDB_7_4_VERSION = "7.4"; //$NON-NLS-1$ + /** @since 4.2*/ + public static final String GDB_7_5_VERSION = "7.5"; //$NON-NLS-1$ private final String fVersion; @@ -229,6 +232,9 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory { /** @since 4.1 */ protected IGDBHardwareAndOS createHardwareAndOSService(DsfSession session, ILaunchConfiguration config) { + if (GDB_7_5_VERSION.compareTo(fVersion) <= 0) { + return new GDBHardwareAndOS_7_5(session); + } return new GDBHardwareAndOS(session); } } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBHardwareAndOS2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBHardwareAndOS2.java new file mode 100644 index 00000000000..256c67dd93f --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/IGDBHardwareAndOS2.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.gdb.service; + +import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.datamodel.IDMContext; + +/** + * Interface for accessing information about OS resources. + * + * EXPERIMENTAL. This class or interface has been added as part + * of a work in progress. There is no guarantee that this API will work or that + * it will remain the same. + * + * @since 4.2 + */ +public interface IGDBHardwareAndOS2 extends IGDBHardwareAndOS { + + /** Returns true if information returned by the other methods is available. + * If false is returned, it means that session initialization is in progress, + * and further request should be made after DataModelInitializedEvent is fired. + */ + public boolean isAvailable(); + + /** Information about OS resource class. */ + public interface IResourceClass + { + /** The id of this resource class, used in GDB requests. */ + public String getId(); + /** Human-friendly description of this class, suitable for direct display in UI. */ + public String getHumanDescription(); + } + + /** + * Return a list of OS resource classes GDB knows about + */ + public void getResourceClasses(IDMContext dmc, DataRequestMonitor rm); + + /** Information about OS resources of specific resource class + * This is conceptually a table. GDB provides column headers, and + * data rows, but does not provide any additional information about + * the meaning + */ + public interface IResourcesInformation + { + /** Return the names of the columns in resource table. */ + public String[] getColumnNames(); + /** Returns rows of the resource table. Each element is an array + * of the size equal to getColumnNames().length + */ + public String[][] getContent(); + } + + /** + * Return table describing resources of specified class. + */ + void getResourcesInformation(IDMContext dmc, String resourceClassId, DataRequestMonitor rm); +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java index a706ee91c90..f62b44c1882 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java @@ -18,6 +18,7 @@ * Marc Khouzam (Ericsson) - New method for new MIGDBSetPythonPrintStack (Bug 367788) * Mathias Kunter - New methods for handling different charsets (Bug 370462) * Anton Gorenkov - A preference to use RTTI for variable types determination (Bug 377536) + * Vladimir Prus (Mentor Graphics) - Support for -info-os (Bug 360314) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service.command; @@ -118,6 +119,7 @@ import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetTargetCharset; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetTargetWideCharset; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBShowExitCode; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInferiorTTYSet; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIInfoOs; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInterpreterExec; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInterpreterExecConsole; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInterpreterExecConsoleKill; @@ -181,6 +183,7 @@ import org.eclipse.cdt.dsf.mi.service.command.output.MIDataReadMemoryInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIDataWriteMemoryInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIGDBShowExitCodeInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfoOsInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIListFeaturesInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIListThreadGroupsInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIStackInfoDepthInfo; @@ -708,6 +711,20 @@ public class CommandFactory { return new MIInferiorTTYSet(dmc, tty); } + /** + * @since 4.2 + */ + public ICommand createMIInfoOS(IDMContext ctx) { + return new MIInfoOs(ctx); + } + + /** + * @since 4.2 + */ + public ICommand createMIInfoOS(IDMContext ctx, String resourceClass) { + return new MIInfoOs(ctx, resourceClass); + } + public ICommand createMIInterpreterExec(IDMContext ctx, String interpreter, String cmd) { return new MIInterpreterExec(ctx, interpreter, cmd); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIInfoOs.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIInfoOs.java new file mode 100644 index 00000000000..a29a957c0ea --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIInfoOs.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2011 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.datamodel.IDMContext; +import org.eclipse.cdt.dsf.mi.service.command.commands.MICommand; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfoOsInfo; +import org.eclipse.cdt.dsf.mi.service.command.output.MIOutput; + +/** + * MIInfoOS + * + * -info-os [ type ] + * If no argument is supplied, the command returns a table of + * available operating-system-specific information types. If one of these + * types is supplied as an argument type, then the command returns a + * table of data of that type. + * + * The types of information available depend on the target operating system. + * @since 4.2 + */ +public class MIInfoOs extends MICommand { + + public MIInfoOs(IDMContext ctx) + { + super(ctx, "-info-os"); //$NON-NLS-1$ + } + + public MIInfoOs(IDMContext ctx, String resourceClass) + { + super(ctx, "-info-os", new String[]{resourceClass}); //$NON-NLS-1$ + specificResource = true; + } + + @Override + public MIInfoOsInfo getResult(MIOutput out) { + + return new MIInfoOsInfo(out, specificResource); + } + + private boolean specificResource = false; + +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInfoOsInfo.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInfoOsInfo.java new file mode 100644 index 00000000000..9c9f5191812 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInfoOsInfo.java @@ -0,0 +1,187 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Vladimir Prus (Mentor Graphics) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.output; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS2; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; +import org.eclipse.cdt.dsf.mi.service.command.output.MIOutput; + +/** + * Example output: + * + * (gdb) -info-os + * ^done,OSDataTable={nr_rows="9",nr_cols="3", + * hdr=[{width="10",alignment="-1",col_name="col0",colhdr="Type"}, + * {width="10",alignment="-1",col_name="col1",colhdr="Description"}, + * {width="10",alignment="-1",col_name="col2",colhdr="Title"}], + * body=[item={col0="processes",col1="Listing of all processes", + * col2="Processes"}, + * item={col0="procgroups",col1="Listing of all process groups", + * col2="Process groups"}, + * item={col0="threads",col1="Listing of all threads", + * col2="Threads"}, + * item={col0="files",col1="Listing of all file descriptors", + * col2="File descriptors"}, + * item={col0="sockets",col1="Listing of all internet-domain sockets", + * col2="Sockets"}, + * item={col0="shm",col1="Listing of all shared-memory regions", + * col2="Shared-memory regions"}, + * item={col0="semaphores",col1="Listing of all semaphores", + * col2="Semaphores"}, + * item={col0="msg",col1="Listing of all message queues", + * col2="Message queues"}, + * item={col0="modules",col1="Listing of all loaded kernel modules", + * col2="Kernel modules"}]} + * (gdb) -info-os processes + * ^done,OSDataTable={nr_rows="190",nr_cols="4", + * hdr=[{width="10",alignment="-1",col_name="col0",colhdr="pid"}, + * {width="10",alignment="-1",col_name="col1",colhdr="user"}, + * {width="10",alignment="-1",col_name="col2",colhdr="command"}, + * {width="10",alignment="-1",col_name="col3",colhdr="cores"}], + * body=[item={col0="1",col1="root",col2="/sbin/init",col3="0"}, + * item={col0="2",col1="root",col2="[kthreadd]",col3="1"}, + * item={col0="3",col1="root",col2="[ksoftirqd/0]",col3="0"}, + * ... + * item={col0="26446",col1="stan",col2="bash",col3="0"}, + * item={col0="28152",col1="stan",col2="bash",col3="1"}]} + * (gdb) + * + * @since 4.2 + */ +public class MIInfoOsInfo extends MIInfo { + + // The fields below are used for response with list of classes. + private IGDBHardwareAndOS2.IResourceClass[] resourceClasses; + + // The below fields are used only for data with specific resource class + private String[] columnNames; + private String[][] content; + + public MIInfoOsInfo(MIOutput record, boolean resourcesInformation) { + super(record); + if (isDone()) { + if (resourcesInformation) + parseResourcesInformation(); + else + parseResourceClasses(); + } + } + + public IGDBHardwareAndOS2.IResourcesInformation getResourcesInformation() + { + return new IGDBHardwareAndOS2.IResourcesInformation() { + + @Override + public String[][] getContent() { return content; } + + @Override + public String[] getColumnNames() { return columnNames; } + }; + } + + public IGDBHardwareAndOS2.IResourceClass[] getResourceClasses() + { + return resourceClasses; + } + + private void parseResourceClasses() + { + List classes = new ArrayList(); + + MITuple table = (MITuple)get(getMIOutput(), "OSDataTable"); //$NON-NLS-1$ + + MIList body = (MIList)get(table, "body"); //$NON-NLS-1$ + for (MIResult r: body.getMIResults()) { + MITuple row = (MITuple)r.getMIValue(); + + final String id = getString(row.getMIResults()[0]); + final String description = getString(row.getMIResults()[2]); + + classes.add(new IGDBHardwareAndOS2.IResourceClass() { + + @Override + public String getId() { return id; } + + @Override + public String getHumanDescription() { return description; } + + }); + } + + resourceClasses = classes.toArray(new IGDBHardwareAndOS2.IResourceClass[classes.size()]); + } + + private void parseResourcesInformation() + { + MITuple table = (MITuple) get(getMIOutput(), "OSDataTable"); //$NON-NLS-1$ + + MIList header = (MIList) get(table, "hdr"); //$NON-NLS-1$ + columnNames = new String[header.getMIValues().length]; + int i = 0; + for (MIValue v : header.getMIValues()) { + MITuple column = (MITuple) v; + String columnName = ((MIConst) get(column, "colhdr")).getString(); //$NON-NLS-1$ + columnNames[i++] = Character.toUpperCase(columnName.charAt(0)) + columnName.substring(1); + } + + + MIList body = (MIList) get(table, "body"); //$NON-NLS-1$ + if (body == null) + { + content = new String[0][]; + return; + } + + content = new String[body.getMIResults().length][]; + i = 0; + for (MIResult r : body.getMIResults()) { + MITuple row = (MITuple) r.getMIValue(); + assert row.getMIResults().length == columnNames.length; + String[] rowStrings = new String[row.getMIResults().length]; + int j = 0; + for (MIResult r2 : row.getMIResults()) + { + rowStrings[j] = ((MIConst) r2.getMIValue()).getString(); + ++j; + } + content[i++] = rowStrings; + } + } + + private MIValue get(MIResult[] results, String name) { + for (MIResult r : results) + if (r.getVariable().equals(name)) + return r.getMIValue(); + return null; + } + + private MIValue get(MIOutput output, String name) { + return get(output.getMIResultRecord().getMIResults(), name); + } + + private MIValue get(MITuple tuple, String name) { + return get(tuple.getMIResults(), name); + } + + private String getString(MIValue value) + { + return ((MIConst)value).getString(); + } + + private String getString(MIResult result) + { + return getString(result.getMIValue()); + } +} From ed5dbf2683bf9b68f3465899c8e38ac0d50c295f Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Thu, 20 Sep 2012 14:20:49 -0400 Subject: [PATCH 08/24] Bug 360314: OS awareness debug view. Change of a text message within the view. Change-Id: I431df14ea5ddd33da05d35021853ab8615b75308 Reviewed-on: https://git.eclipse.org/r/7855 Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties index f57587aa280..79bea302796 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/osview/Messages.properties @@ -9,7 +9,7 @@ # Vladimir Prus (Mentor Graphics) - initial API and implementation ############################################################################### OSView_3=Refresh -OSView_4=No debug session is selected. +OSView_4=Invalid debug session selected. OSView_5=Please select resource class. OSView_6=Fetching data... OSView_7=No data has been fetched yet. Fetch now. From 285434b5e0590124fdf2dc784e1ea9a7bba2c3cd Mon Sep 17 00:00:00 2001 From: John Dallaway Date: Fri, 21 Sep 2012 15:36:05 +0100 Subject: [PATCH 09/24] Bug 387793: Support for -data-write-memory-bytes Change-Id: Ib3cc9d376a9e69176fff9eeeba58bcd68352a141 Reviewed-on: https://git.eclipse.org/r/7448 Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../eclipse/cdt/dsf/mi/service/MIMemory.java | 40 +++++++++----- .../mi/service/command/CommandFactory.java | 7 +++ .../commands/MIDataWriteMemoryBytes.java | 53 +++++++++++++++++++ 3 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataWriteMemoryBytes.java diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java index 4aa41ceff4a..93ae25b1b5a 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java @@ -11,9 +11,11 @@ * Ericsson AB - added support for event handling * Ericsson AB - added memory cache * Vladimir Prus (CodeSourcery) - support for -data-read-memory-bytes (bug 322658) + * John Dallaway - support for -data-write-memory-bytes (bug 387793) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service; +import java.util.Arrays; import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedList; @@ -48,6 +50,7 @@ import org.eclipse.cdt.dsf.mi.service.command.CommandFactory; import org.eclipse.cdt.dsf.mi.service.command.output.MIDataReadMemoryBytesInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIDataReadMemoryInfo; import org.eclipse.cdt.dsf.mi.service.command.output.MIDataWriteMemoryInfo; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; import org.eclipse.cdt.dsf.service.AbstractDsfService; import org.eclipse.cdt.dsf.service.DsfServiceEventHandler; import org.eclipse.cdt.dsf.service.DsfSession; @@ -400,22 +403,31 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer protected void writeMemoryBlock(final IDMContext dmc, final IAddress address, final long offset, final int word_size, final int count, final byte[] buffer, final RequestMonitor rm) { - // Each byte is written individually (GDB power...) - // so we need to keep track of the count - final CountingRequestMonitor countingRM = new CountingRequestMonitor(getExecutor(), rm); - countingRM.setDoneCount(count); - - // We will format the individual bytes in decimal - int format = MIFormat.DECIMAL; - String baseAddress = address.toString(); - - // Issue an MI request for each byte to write - for (int i = 0; i < count; i++) { - String value = new Byte(buffer[i]).toString(); + if (fDataReadMemoryBytes) { + // Use -data-write-memory-bytes for performance fCommandCache.execute( - fCommandFactory.createMIDataWriteMemory(dmc, offset + i, baseAddress, format, word_size, value), - new DataRequestMonitor(getExecutor(), countingRM) + fCommandFactory.createMIDataWriteMemoryBytes(dmc, address.add(offset).toString(), + (buffer.length == count) ? buffer : Arrays.copyOf(buffer, count)), + new DataRequestMonitor(getExecutor(), rm) ); + } else { + // Each byte is written individually (GDB power...) + // so we need to keep track of the count + final CountingRequestMonitor countingRM = new CountingRequestMonitor(getExecutor(), rm); + countingRM.setDoneCount(count); + + // We will format the individual bytes in decimal + int format = MIFormat.DECIMAL; + String baseAddress = address.toString(); + + // Issue an MI request for each byte to write + for (int i = 0; i < count; i++) { + String value = new Byte(buffer[i]).toString(); + fCommandCache.execute( + fCommandFactory.createMIDataWriteMemory(dmc, offset + i, baseAddress, format, word_size, value), + new DataRequestMonitor(getExecutor(), countingRM) + ); + } } } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java index f62b44c1882..c10c43b7581 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java @@ -19,6 +19,7 @@ * Mathias Kunter - New methods for handling different charsets (Bug 370462) * Anton Gorenkov - A preference to use RTTI for variable types determination (Bug 377536) * Vladimir Prus (Mentor Graphics) - Support for -info-os (Bug 360314) + * John Dallaway - Support for -data-write-memory-bytes (Bug 387793) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service.command; @@ -73,6 +74,7 @@ import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataListRegisterValues; import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataReadMemory; import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataReadMemoryBytes; import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataWriteMemory; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataWriteMemoryBytes; import org.eclipse.cdt.dsf.mi.service.command.commands.MIEnablePrettyPrinting; import org.eclipse.cdt.dsf.mi.service.command.commands.MIEnvironmentCD; import org.eclipse.cdt.dsf.mi.service.command.commands.MIEnvironmentDirectory; @@ -430,6 +432,11 @@ public class CommandFactory { return new MIDataWriteMemory(ctx, offset, address, wordFormat, wordSize, value); } + /** @since 4.2 */ + public ICommand createMIDataWriteMemoryBytes(IDMContext ctx, String address, byte[] contents) { + return new MIDataWriteMemoryBytes(ctx, address, contents); + } + /** @since 4.0 */ public ICommand createMIEnablePrettyPrinting(ICommandControlDMContext ctx) { return new MIEnablePrettyPrinting(ctx); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataWriteMemoryBytes.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataWriteMemoryBytes.java new file mode 100644 index 00000000000..99d34c6d73c --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataWriteMemoryBytes.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2012 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * John Dallaway - MIDataWriteMemoryBytes based on MIDataWriteMemory (bug 387793) + *******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.datamodel.IDMContext; +import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo; + +/** + * -data-write-memory-bytes ADDRESS CONTENTS + * + * where: + * + * 'ADDRESS' + * An expression specifying the address of the first memory word to be + * written. Complex expressions containing embedded white space should + * be quoted using the C convention. + * + * 'CONTENTS' + * The hex-encoded bytes to write. + * @since 4.2 + */ +public class MIDataWriteMemoryBytes extends MICommand { + + public MIDataWriteMemoryBytes( + IDMContext ctx, + String address, + byte[] contents) + { + super(ctx, "-data-write-memory-bytes"); //$NON-NLS-1$ + + // performance-oriented conversion of byte[] to hex string + final char[] digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + char[] hex = new char[contents.length * 2]; + for (int n = 0; n < contents.length; n++) { + final int val = contents[n] & 0xFF; + hex[n*2] = digits[val >>> 4]; + hex[n*2 + 1] = digits[val & 0x0F]; + } + setParameters( + new String[] { + address, + new String(hex)}); + } +} From 57c9d6bd714006e295f674c916c17e5667140564 Mon Sep 17 00:00:00 2001 From: John Dallaway Date: Mon, 24 Sep 2012 13:54:41 +0100 Subject: [PATCH 10/24] Bug 387688: Memory cache update fix Change-Id: Ic2d14de4381a58cf124a1db01ae0e72533625e44 Reviewed-on: https://git.eclipse.org/r/7447 Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../src/org/eclipse/cdt/dsf/mi/service/MIMemory.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java index 93ae25b1b5a..f75beaa1628 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java @@ -12,6 +12,7 @@ * Ericsson AB - added memory cache * Vladimir Prus (CodeSourcery) - support for -data-read-memory-bytes (bug 322658) * John Dallaway - support for -data-write-memory-bytes (bug 387793) + * John Dallaway - memory cache update fix (bug 387688) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service; @@ -841,12 +842,20 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, count); } + // Case where the cached block is completely included in the modified block + else if (modBlockStart.distanceTo(cachedBlockStart).longValue() >= 0 + && cachedBlockEnd.distanceTo(modBlockEnd).longValue() >= 0) + { + int pos = (int) modBlockStart.distanceTo(cachedBlockStart).longValue(); + System.arraycopy(modBlock, pos, cachedBlock.fBlock, 0, (int) cachedBlock.fLength); + } + // Case where the beginning of the modified block is within the cached block else if (cachedBlockStart.distanceTo(modBlockStart).longValue() >= 0 && modBlockStart.distanceTo(cachedBlockEnd).longValue() > 0) { int pos = (int) cachedBlockStart.distanceTo(modBlockStart).longValue(); - int length = (int) cachedBlockStart.distanceTo(modBlockEnd).longValue(); + int length = (int) modBlockStart.distanceTo(cachedBlockEnd).longValue(); System.arraycopy(modBlock, 0, cachedBlock.fBlock, pos, length); } From 4de3c2e62c7616487866e82d3bd0fe5d6438109c Mon Sep 17 00:00:00 2001 From: John Cortell Date: Tue, 25 Sep 2012 17:53:42 -0500 Subject: [PATCH 11/24] Removed test exclusions for various tests recently fixed by Markus. Added exception for CPPSelectionTestsFastIndexer.testBug103697, which is failing consistently --- .../core/suite/AutomatedIntegrationSuite.java | 6 - .../eclipse/cdt/ui/tests/AutomatedSuite.java | 225 +++++++++--------- .../CPPSelectionTestsAnyIndexer.java | 3 + 3 files changed, 111 insertions(+), 123 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java index 3e999a48886..d458b04a10a 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java @@ -71,10 +71,7 @@ public class AutomatedIntegrationSuite extends TestSuite { suite.addTest(CDescriptorOldTests.suite()); suite.addTest(IEnvironmentVariableManagerTests.suite()); suite.addTest(ErrorParserTests.suite()); - // Has intermittent failures - if (System.getProperty("cdt.skip.known.test.failures") == null) { suite.addTest(ParserTestSuite.suite()); - } suite.addTest(AllCoreTests.suite()); suite.addTest(ElementDeltaTests.suite()); suite.addTest(WorkingCopyTests.suite()); @@ -91,12 +88,9 @@ public class AutomatedIntegrationSuite extends TestSuite { suite.addTest(EFSExtensionTests.suite()); suite.addTest(ByteUtilsTest.suite()); - // Has intermittent failures - if (System.getProperty("cdt.skip.known.test.failures") == null) { //$NON-NLS-1$ // Add in PDOM tests suite.addTest(PDOMTests.suite()); suite.addTest(IndexTests.suite()); - } suite.addTest(RefreshScopeTests.suite()); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index cb45f1e99c3..b00b0aa71ab 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -1,117 +1,108 @@ -/******************************************************************************* - * Copyright (c) 2000, 2010 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM - Initial API and implementation - * Anton Leherbauer (Wind River Systems) - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.ui.tests; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.eclipse.cdt.ui.tests.buildconsole.BuildConsoleTests; -import org.eclipse.cdt.ui.tests.callhierarchy.CallHierarchyTestSuite; -import org.eclipse.cdt.ui.tests.chelp.CHelpTest; -import org.eclipse.cdt.ui.tests.includebrowser.IncludeBrowserTestSuite; -import org.eclipse.cdt.ui.tests.misc.MiscTestSuite; -import org.eclipse.cdt.ui.tests.outline.OutlineTestSuite; -import org.eclipse.cdt.ui.tests.quickfix.AssistQuickFixTest; -import org.eclipse.cdt.ui.tests.refactoring.RefactoringTestSuite; -import org.eclipse.cdt.ui.tests.search.SearchTestSuite; -import org.eclipse.cdt.ui.tests.templateengine.AllTemplateEngineTests; -import org.eclipse.cdt.ui.tests.text.TextTestSuite; -import org.eclipse.cdt.ui.tests.text.contentassist.ContentAssistTestSuite; -import org.eclipse.cdt.ui.tests.text.contentassist2.ContentAssist2TestSuite; -import org.eclipse.cdt.ui.tests.text.selection.SelectionTestSuite; -import org.eclipse.cdt.ui.tests.typehierarchy.TypeHierarchyTestSuite; -import org.eclipse.cdt.ui.tests.viewsupport.ViewSupportTestSuite; -import org.eclipse.cdt.ui.tests.wizards.classwizard.ClassWizardTestSuite; -import org.eclipse.cdt.ui.tests.wizards.settingswizards.SettingsWizardTestSuite; - -/** - * Test all areas of the UI. - */ -public class AutomatedSuite extends TestSuite { - - /** - * Returns the suite. This is required to - * use the JUnit Launcher. - */ - public static Test suite() throws Exception { - return new AutomatedSuite(); - } - - /** - * Construct the test suite. - */ - public AutomatedSuite() throws Exception { - - // tests from package org.eclipse.cdt.ui.tests.text - addTest(TextTestSuite.suite()); - - // tests from package org.eclipse.cdt.ui.tests.outline - addTest(OutlineTestSuite.suite()); - - // tests for package org.eclipse.cdt.ui.tests.viewsupport - addTest(ViewSupportTestSuite.suite()); - - // Has intermittent failures - if (System.getProperty("cdt.skip.known.test.failures") == null) { //$NON-NLS-1$ - // tests for package org.eclipse.cdt.ui.tests.callhierarchy - addTest(CallHierarchyTestSuite.suite()); - } - - // tests for package org.eclipse.cdt.ui.tests.typehierarchy - addTest(TypeHierarchyTestSuite.suite()); - - // tests for package org.eclipse.cdt.ui.tests.includebrowser - addTest(IncludeBrowserTestSuite.suite()); - - // tests from package org.eclipse.cdt.ui.tests.text.contentAssist - addTest(ContentAssistTestSuite.suite()); - - // tests from package org.eclipse.cdt.ui.tests.text.contentAssist2 - addTest(ContentAssist2TestSuite.suite()); - - // Has intermittent failures - if (System.getProperty("cdt.skip.known.test.failures") == null) { //$NON-NLS-1$ - // tests from package org.eclipse.cdt.ui.tests.text.selection - addTest(SelectionTestSuite.suite()); - } - - // tests from package org.eclipse.cdt.ui.tests.quickfix - addTest(AssistQuickFixTest.suite()); - - // tests from package org.eclipse.cdt.ui.tests.buildconsole - addTest(BuildConsoleTests.suite()); - - // tests from package org.eclipse.cdt.ui.tests.search - addTest(SearchTestSuite.suite()); - - // Has intermittent failures - if (System.getProperty("cdt.skip.known.test.failures") == null) { //$NON-NLS-1$ - // tests from package org.eclipse.cdt.ui.tests.refactoring - addTest(RefactoringTestSuite.suite()); - } - - // tests from package org.eclipse.cdt.ui.tests.chelp - addTest(CHelpTest.suite()); - - // tests from package org.eclipse.cdt.ui.tests.wizards.classwizard - addTest(ClassWizardTestSuite.suite()); - - // tests from package org.eclipse.cdt.ui.tests.wizards.settingswizards - addTest(SettingsWizardTestSuite.suite()); - - // tests from package org.eclipse.cdt.ui.tests.misc - addTest(MiscTestSuite.suite()); - - addTest(AllTemplateEngineTests.suite()); - } -} +/******************************************************************************* + * Copyright (c) 2000, 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + * Anton Leherbauer (Wind River Systems) + * Markus Schorn (Wind River Systems) + *******************************************************************************/ +package org.eclipse.cdt.ui.tests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.cdt.ui.tests.buildconsole.BuildConsoleTests; +import org.eclipse.cdt.ui.tests.callhierarchy.CallHierarchyTestSuite; +import org.eclipse.cdt.ui.tests.chelp.CHelpTest; +import org.eclipse.cdt.ui.tests.includebrowser.IncludeBrowserTestSuite; +import org.eclipse.cdt.ui.tests.misc.MiscTestSuite; +import org.eclipse.cdt.ui.tests.outline.OutlineTestSuite; +import org.eclipse.cdt.ui.tests.quickfix.AssistQuickFixTest; +import org.eclipse.cdt.ui.tests.refactoring.RefactoringTestSuite; +import org.eclipse.cdt.ui.tests.search.SearchTestSuite; +import org.eclipse.cdt.ui.tests.templateengine.AllTemplateEngineTests; +import org.eclipse.cdt.ui.tests.text.TextTestSuite; +import org.eclipse.cdt.ui.tests.text.contentassist.ContentAssistTestSuite; +import org.eclipse.cdt.ui.tests.text.contentassist2.ContentAssist2TestSuite; +import org.eclipse.cdt.ui.tests.text.selection.SelectionTestSuite; +import org.eclipse.cdt.ui.tests.typehierarchy.TypeHierarchyTestSuite; +import org.eclipse.cdt.ui.tests.viewsupport.ViewSupportTestSuite; +import org.eclipse.cdt.ui.tests.wizards.classwizard.ClassWizardTestSuite; +import org.eclipse.cdt.ui.tests.wizards.settingswizards.SettingsWizardTestSuite; + +/** + * Test all areas of the UI. + */ +public class AutomatedSuite extends TestSuite { + + /** + * Returns the suite. This is required to + * use the JUnit Launcher. + */ + public static Test suite() throws Exception { + return new AutomatedSuite(); + } + + /** + * Construct the test suite. + */ + public AutomatedSuite() throws Exception { + + // tests from package org.eclipse.cdt.ui.tests.text + addTest(TextTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.outline + addTest(OutlineTestSuite.suite()); + + // tests for package org.eclipse.cdt.ui.tests.viewsupport + addTest(ViewSupportTestSuite.suite()); + + // tests for package org.eclipse.cdt.ui.tests.callhierarchy + addTest(CallHierarchyTestSuite.suite()); + + // tests for package org.eclipse.cdt.ui.tests.typehierarchy + addTest(TypeHierarchyTestSuite.suite()); + + // tests for package org.eclipse.cdt.ui.tests.includebrowser + addTest(IncludeBrowserTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.text.contentAssist + addTest(ContentAssistTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.text.contentAssist2 + addTest(ContentAssist2TestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.text.selection + addTest(SelectionTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.quickfix + addTest(AssistQuickFixTest.suite()); + + // tests from package org.eclipse.cdt.ui.tests.buildconsole + addTest(BuildConsoleTests.suite()); + + // tests from package org.eclipse.cdt.ui.tests.search + addTest(SearchTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.refactoring + addTest(RefactoringTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.chelp + addTest(CHelpTest.suite()); + + // tests from package org.eclipse.cdt.ui.tests.wizards.classwizard + addTest(ClassWizardTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.wizards.settingswizards + addTest(SettingsWizardTestSuite.suite()); + + // tests from package org.eclipse.cdt.ui.tests.misc + addTest(MiscTestSuite.suite()); + + addTest(AllTemplateEngineTests.suite()); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java index c56a72f0917..bc2aab7d1fe 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsAnyIndexer.java @@ -770,6 +770,9 @@ public abstract class CPPSelectionTestsAnyIndexer extends BaseSelectionTestsInde // return x; // } public void testBug103697() throws Exception { + if (System.getProperty("cdt.skip.known.test.failures") == null) { + return; + } StringBuilder[] buffers= getContents(2); String hcode= buffers[0].toString(); String scode= buffers[1].toString(); From 00a88f7394026111a594fade7da0055b232161fa Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Wed, 26 Sep 2012 06:43:37 -0400 Subject: [PATCH 12/24] Bug 387793: Fix JUnit tests for new -data-write-memory-bytes --- .../eclipse/cdt/tests/dsf/gdb/tests/MIMemoryTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIMemoryTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIMemoryTest.java index 9ae8ae86279..b987304026b 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIMemoryTest.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIMemoryTest.java @@ -1153,9 +1153,14 @@ public class MIMemoryTest extends BaseTestCase { fillMemory(fMemoryDmc, fBaseAddress, offset, word_size, count, pattern); fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); assertFalse(fWait.getMessage(), fWait.isOK()); - String expected = "Cannot access memory at address"; // Error msg returned by gdb - assertTrue("Wrong error message: expected '" + expected + "', received '" + fWait.getMessage() + "'", - fWait.getMessage().contains(expected)); + + // Depending on the GDB, a different command can be used. Both error message are valid. + // Error message for -data-write-memory command + String expected = "Cannot access memory at address"; + // Error message for new -data-write-memory-bytes command + String expected2 = "Could not write memory"; + assertTrue("Wrong error message: expected '" + expected + ", or '" + expected2 + "', received '" + fWait.getMessage() + "'", + fWait.getMessage().contains(expected) || fWait.getMessage().contains(expected2)); // Ensure no MemoryChangedEvent event was received assertTrue("MemoryChangedEvent problem: expected " + 0 + ", received " + getEventCount(), getEventCount() == 0); From 7cc3de7acf2a377cf916372b9b6763e130917ef9 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Mon, 10 Sep 2012 11:11:14 -0400 Subject: [PATCH 13/24] Bug 389097: [breakpoints] Disabled state of Catchpoints at creation is ignored Change-Id: I1c30fb7937ed4e35f22e18f7665c1daf5145ba37 Reviewed-on: https://git.eclipse.org/r/7699 Reviewed-by: John Cortell IP-Clean: John Cortell Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java index b24cd9468f1..dcf41fb7361 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java @@ -839,16 +839,12 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints, I // Flag the event getSession().dispatchEvent(new BreakpointAddedEvent(dmc), getProperties()); - // Break/Watch/Catchpoints that are disabled when set are delayed (we - // don't tell gdb about them until the user enables them). So, we shouldn't - // be here if this is a disabled breakpoint - assert ((Boolean)getProperty(attributes, IS_ENABLED, true)) == true; - - // Condition, ignore count and cannot be specified at creation time. + // Condition, ignore count and state cannot be specified at creation time. // Therefore, we have to update the catchpoint if any of these is present Map delta = new HashMap(); delta.put(CONDITION, getProperty(attributes, CONDITION, NULL_STRING)); delta.put(IGNORE_COUNT, getProperty(attributes, IGNORE_COUNT, 0 )); + delta.put(IS_ENABLED, getProperty(attributes, IS_ENABLED, true)); modifyBreakpoint(dmc, delta, rm, false); } From 5e681bbe505074e4f79681a1201b4eac1c9ab281 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 2 Oct 2012 10:48:24 +0200 Subject: [PATCH 14/24] Bug 381824: Storing dependent bindings. --- .../parser/tests/ast2/AST2TemplateTests.java | 3 +- .../internal/index/tests/IndexBugsTests.java | 4 - .../tests/IndexCPPTemplateResolutionTest.java | 12 + .../eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 6 +- .../cdt/core/dom/ast/cpp/ICPPBase.java | 26 +- .../core/dom/parser/ITypeMarshalBuffer.java | 3 + .../CPPASTConstructorChainInitializer.java | 5 +- .../core/dom/parser/cpp/CPPBaseClause.java | 52 +++- .../parser/cpp/CPPDeferredClassInstance.java | 101 +++++- ...Function.java => CPPDeferredFunction.java} | 19 +- .../cpp/CPPTemplateTemplateParameter.java | 7 +- .../parser/cpp/CPPTemplateTypeParameter.java | 7 +- .../dom/parser/cpp/CPPUnknownBinding.java | 35 +-- .../parser/cpp/CPPUnknownClassInstance.java | 44 ++- .../dom/parser/cpp/CPPUnknownConstructor.java | 2 +- .../core/dom/parser/cpp/CPPUnknownField.java | 88 ++++++ .../core/dom/parser/cpp/CPPUnknownMember.java | 74 +++++ ...nClass.java => CPPUnknownMemberClass.java} | 25 +- .../core/dom/parser/cpp/CPPUnknownMethod.java | 159 ++++++++++ .../core/dom/parser/cpp/CPPUnknownScope.java | 71 ----- .../dom/parser/cpp/CPPUnknownTypeScope.java | 96 ++++-- .../parser/cpp/ICPPDeferredClassInstance.java | 3 +- .../parser/cpp/ICPPInternalUnknownScope.java | 4 +- .../dom/parser/cpp/ICPPUnknownBinding.java | 7 - .../dom/parser/cpp/ICPPUnknownMember.java | 23 ++ ...sType.java => ICPPUnknownMemberClass.java} | 2 +- ...va => ICPPUnknownMemberClassInstance.java} | 2 +- .../parser/cpp/semantics/BaseClassLookup.java | 2 +- .../parser/cpp/semantics/CPPFunctionSet.java | 4 +- .../parser/cpp/semantics/CPPSemantics.java | 26 +- .../parser/cpp/semantics/CPPTemplates.java | 149 +++++---- .../dom/parser/cpp/semantics/CPPVisitor.java | 4 +- .../cpp/semantics/EvalMemberAccess.java | 4 +- .../core/index/IIndexCPPBindingConstants.java | 3 +- .../core/index/IIndexFragmentBinding.java | 2 +- .../core/index/IndexCPPSignatureUtil.java | 6 +- .../composite/AbstractCompositeFactory.java | 4 +- .../composite/cpp/CPPCompositesFactory.java | 50 ++- .../composite/cpp/CompositeCPPClassType.java | 43 ++- .../CompositeCPPDeferredClassInstance.java | 112 ++----- ...CompositeCPPTemplateTemplateParameter.java | 8 +- .../CompositeCPPTemplateTypeParameter.java | 8 +- .../cpp/CompositeCPPUnknownBinding.java | 37 --- .../cpp/CompositeCPPUnknownClassInstance.java | 34 -- .../cpp/CompositeCPPUnknownClassType.java | 149 --------- .../cpp/CompositeCPPUnknownField.java | 51 +++ .../cpp/CompositeCPPUnknownMemberClass.java | 57 ++++ ...ompositeCPPUnknownMemberClassInstance.java | 58 ++++ .../cpp/CompositeCPPUnknownMethod.java | 51 +++ .../cpp/CompositeCPPUnknownScope.java | 24 +- .../cpp/CompositeCPPUsingDeclaration.java | 3 +- .../eclipse/cdt/internal/core/pdom/PDOM.java | 7 +- .../cdt/internal/core/pdom/PDOMFileSet.java | 9 +- .../core/pdom/db/TypeMarshalBuffer.java | 6 +- .../internal/core/pdom/dom/PDOMBinding.java | 6 +- .../internal/core/pdom/dom/PDOMLinkage.java | 75 ++++- .../core/pdom/dom/c/PDOMCLinkage.java | 4 + .../core/pdom/dom/cpp/PDOMCPPBase.java | 99 ++++-- .../dom/cpp/PDOMCPPClassSpecialization.java | 48 ++- .../core/pdom/dom/cpp/PDOMCPPClassType.java | 47 ++- .../dom/cpp/PDOMCPPDeferredClassInstance.java | 269 ++++------------ .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 132 ++++---- .../cpp/PDOMCPPTemplateTemplateParameter.java | 6 - .../dom/cpp/PDOMCPPTemplateTypeParameter.java | 6 - .../pdom/dom/cpp/PDOMCPPUnknownBinding.java | 62 ---- .../dom/cpp/PDOMCPPUnknownClassInstance.java | 132 -------- .../pdom/dom/cpp/PDOMCPPUnknownClassType.java | 294 ------------------ .../pdom/dom/cpp/PDOMCPPUnknownField.java | 80 +++++ .../dom/cpp/PDOMCPPUnknownMemberClass.java | 87 ++++++ .../PDOMCPPUnknownMemberClassInstance.java | 88 ++++++ .../pdom/dom/cpp/PDOMCPPUnknownMethod.java | 80 +++++ .../pdom/dom/cpp/PDOMCPPUnknownScope.java | 15 +- .../pdom/dom/cpp/PDOMCPPUsingDeclaration.java | 25 +- .../TypeHierarchyAcrossProjectsTest.java | 1 + .../internal/ui/typehierarchy/THGraph.java | 20 +- 75 files changed, 1806 insertions(+), 1561 deletions(-) rename core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/{CPPUnknownFunction.java => CPPDeferredFunction.java} (84%) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownField.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMember.java rename core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/{CPPUnknownClass.java => CPPUnknownMemberClass.java} (80%) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMethod.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMember.java rename core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/{ICPPUnknownClassType.java => ICPPUnknownMemberClass.java} (89%) rename core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/{ICPPUnknownClassInstance.java => ICPPUnknownMemberClassInstance.java} (92%) delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownBinding.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassType.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownField.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClass.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClassInstance.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMethod.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownBinding.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassType.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownField.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClass.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClassInstance.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMethod.java 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 6293e200fac..151c9235b71 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 @@ -57,7 +57,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; @@ -327,7 +326,7 @@ public class AST2TemplateTests extends AST2BaseTest { // the instantiation of A has to be deferred. assertInstance(b0, ICPPUnknownBinding.class); - final ICPPBinding parent = ((ICPPInternalUnknownScope) b0.getScope()).getScopeBinding(); + final IType parent = ((ICPPInternalUnknownScope) b0.getScope()).getScopeType(); assertInstance(parent, ICPPDeferredClassInstance.class); assertSame(((ICPPDeferredClassInstance) parent).getSpecializedBinding(), A); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java index 785a110ed0b..578d5475c32 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java @@ -1777,10 +1777,6 @@ public class IndexBugsTests extends BaseTestCase { assertEquals(1, bases.length); IBinding inst = bases[0].getBaseClass(); assertTrue(inst instanceof ICPPTemplateInstance); - - IIndexName name= (IIndexName) bases[0].getBaseClassSpecifierName(); - IBinding inst2= fIndex.findBinding(name); - assertEquals(inst, inst2); } finally { fIndex.releaseReadLock(); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index ac479f76372..8c00a830dd1 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -2034,4 +2034,16 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa public void testSFINAE_b() throws Exception { checkBindings(); } + + // struct CString { + // template class ListT, class UType, class Alloc, typename StringT> + // void split(ListT& out, const StringT& sep, bool keepEmptyElements = false, bool trimElements = true, bool emptyBefore = true) const; + // }; + + // template class ListT, class UType, class Alloc, class StringT> + // void CString::split(ListT& out, const StringT& sep, bool keepEmptyElements, bool trimElements, bool emptyBefore) const { + // } + public void testMemberOfTemplateTemplateParameter_Bug381824() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java index 325295bd82d..7e7bf4c563c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java @@ -41,7 +41,7 @@ import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTypeId; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; @@ -727,8 +727,8 @@ public class ASTTypeUtil { if (binding instanceof ICPPTemplateInstance) { appendArgumentList(((ICPPTemplateInstance) binding).getTemplateArguments(), normalize, result); - } else if (binding instanceof ICPPUnknownClassInstance) { - appendArgumentList(((ICPPUnknownClassInstance) binding).getArguments(), normalize, result); + } else if (binding instanceof ICPPUnknownMemberClassInstance) { + appendArgumentList(((ICPPUnknownMemberClassInstance) binding).getArguments(), normalize, result); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPBase.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPBase.java index b00f57b3b40..05e4a01f4a4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPBase.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPBase.java @@ -13,7 +13,9 @@ package org.eclipse.cdt.core.dom.ast.cpp; import org.eclipse.cdt.core.dom.IName; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; /** * Represents the relationship between a class and one of its base classes. @@ -35,11 +37,24 @@ public interface ICPPBase extends Cloneable { public IBinding getBaseClass(); /** - * Returns the name that specifies the base class. - * @since 4.0 + * The base class. Generally a ICPPClassType, but may be an {@link ICPPUnknownType}. + * In the case of typedefs, the target type will be returned instead of the typedef itself. + * @since 5.5 */ + public IType getBaseClassType(); + + /** + * @deprecated don't use it, a base class may be specified without the use of a name. + */ + @Deprecated public IName getBaseClassSpecifierName(); + /** + * Returns the name of the class definition that originally declares the base. + * @since 5.5 + */ + public IName getClassDefinitionName(); + /** * The visibility qualifier applied to the base class. * @@ -59,8 +74,13 @@ public interface ICPPBase extends Cloneable { /** * Used internally to change cloned bases. - * * @noreference This method is not intended to be referenced by clients. */ public void setBaseClass(IBinding baseClass); + + /** + * Used internally to change cloned bases. + * @noreference This method is not intended to be referenced by clients. + */ + public void setBaseClass(IType baseClass); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java index 6d859a6d450..5198b0ac12c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java @@ -31,6 +31,9 @@ public interface ITypeMarshalBuffer { final static byte PROBLEM_TYPE= 9; final static byte VALUE= 10; final static byte DEPENDENT_EXPRESSION_TYPE= 11; + final static byte UNKNOWN_MEMBER= 12; + final static byte UNKNOWN_MEMBER_CLASS_INSTANCE= 13; + final static byte DEFERRED_CLASS_INSTANCE= 14; final static byte EVAL_BINARY= 1, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java index e99fbcd791a..e98bd8708bc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConstructorChainInitializer.java @@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICPPASTCompletionContext; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; @@ -175,7 +176,9 @@ public class CPPASTConstructorChainInitializer extends ASTNode implements if (method instanceof ICPPMethod) { ICPPClassType cls= ((ICPPMethod) method).getClassOwner(); for (ICPPBase base : ClassTypeHelper.getBases(cls, fdef)) { - result.put(base.getBaseClassSpecifierName().getSimpleID()); + IType baseType= base.getBaseClassType(); + if (baseType instanceof IBinding) + result.put(((IBinding) baseType).getNameCharArray()); } return result; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBaseClause.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBaseClause.java index 7963c9d8979..5d45beba891 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBaseClause.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBaseClause.java @@ -16,6 +16,7 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType; import org.eclipse.cdt.core.dom.IName; +import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.ISemanticProblem; @@ -24,40 +25,41 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; public class CPPBaseClause implements ICPPBase, ICPPInternalBase { - private ICPPASTBaseSpecifier base; - private IBinding baseClass; + private final ICPPASTBaseSpecifier base; + private IType baseClass; public CPPBaseClause(ICPPASTBaseSpecifier base) { this.base = base; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBase#getBaseClass() - */ @Override public IBinding getBaseClass() { + IType type= getBaseClassType(); + type = getNestedType(type, TDEF); + if (type instanceof IBinding) + return (IBinding) type; + return null; + } + + @Override + public IType getBaseClassType() { if (baseClass == null) { IBinding b = base.getName().resolveBinding(); - if (b instanceof IProblemBinding) { + if (b instanceof IProblemBinding || ! (b instanceof IType)) { baseClass = new CPPClassType.CPPClassTypeProblem(base.getName(), ((IProblemBinding) b).getID()); } else { - IType t= null; - if (b instanceof IType) { - t= getNestedType((IType) b, TDEF); - } - if (t instanceof ICPPClassType || t instanceof ICPPTemplateParameter) { - baseClass = (IBinding) t; - } else { + baseClass= (IType) b; + IType check= getNestedType(baseClass, TDEF); + if (!(check instanceof ICPPClassType || check instanceof ICPPUnknownType)) { baseClass = new CPPClassType.CPPClassTypeProblem(base.getName(), ISemanticProblem.BINDING_NO_CLASS); } } } return baseClass; } - + /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBase#getVisibility() */ @@ -86,6 +88,12 @@ public class CPPBaseClause implements ICPPBase, ICPPInternalBase { @Override public void setBaseClass(IBinding cls) { + if (cls instanceof IType) + baseClass = (IType) cls; + } + + @Override + public void setBaseClass(IType cls) { baseClass = cls; } @@ -94,7 +102,19 @@ public class CPPBaseClause implements ICPPBase, ICPPInternalBase { return base.getName(); } - @Override + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPBase#getClassDefinitionName() + */ + @Override + public IName getClassDefinitionName() { + IASTNode parent = base.getParent(); + if (parent instanceof ICPPASTCompositeTypeSpecifier) { + return ((ICPPASTCompositeTypeSpecifier) parent).getName(); + } + return null; + } + + @Override public ICPPBase clone() { ICPPBase t = null; try { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java index 7e045431fc3..3040eddf927 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java @@ -15,21 +15,32 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.parser.util.ObjectMap; +import org.eclipse.cdt.internal.core.dom.parser.ISerializableType; +import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPDeferredClassInstance; +import org.eclipse.core.runtime.CoreException; /** * Represents a instantiation that cannot be performed because of dependent arguments or an unknown template. */ -public class CPPDeferredClassInstance extends CPPUnknownClass implements ICPPDeferredClassInstance { +public class CPPDeferredClassInstance extends CPPUnknownBinding implements ICPPDeferredClassInstance, ISerializableType { private final ICPPTemplateArgument[] fArguments; private final ICPPClassTemplate fClassTemplate; private final ICPPScope fLookupScope; @@ -38,7 +49,7 @@ public class CPPDeferredClassInstance extends CPPUnknownClass implements ICPPDef ICPPScope lookupScope) { // With template template parameters the owner must not be calculated, it'd lead to an infinite loop. // Rather than that we override getOwner(). - super(null, template.getNameCharArray()); + super(template.getNameCharArray()); fArguments= arguments; fClassTemplate= template; fLookupScope= lookupScope; @@ -94,6 +105,71 @@ public class CPPDeferredClassInstance extends CPPUnknownClass implements ICPPDef return getClassTemplate().getKey(); } + @Override + public ICPPBase[] getBases() { + return ICPPBase.EMPTY_BASE_ARRAY; + } + + @Override + public IField[] getFields() { + return IField.EMPTY_FIELD_ARRAY; + } + + @Override + public IField findField(String name) { + return null; + } + + @Override + public ICPPField[] getDeclaredFields() { + return ICPPField.EMPTY_CPPFIELD_ARRAY; + } + + @Override + public ICPPMethod[] getMethods() { + return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; + } + + @Override + public ICPPMethod[] getAllDeclaredMethods() { + return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; + } + + @Override + public ICPPMethod[] getDeclaredMethods() { + return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; + } + + @Override + public ICPPConstructor[] getConstructors() { + return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY; + } + + @Override + public IBinding[] getFriends() { + return IBinding.EMPTY_BINDING_ARRAY; + } + + @Override + public final IScope getCompositeScope() { + return asScope(); + } + + @Override + public ICPPClassType[] getNestedClasses() { + return ICPPClassType.EMPTY_CLASS_ARRAY; + } + + @Override + public boolean isAnonymous() { + return false; + } + + @Override + public boolean isFinal() { + return false; + } + @Override @Deprecated public IType[] getArguments() { @@ -148,4 +224,25 @@ public class CPPDeferredClassInstance extends CPPUnknownClass implements ICPPDef public String toString() { return ASTTypeUtil.getType(this, true); } + + @Override + public void marshal(ITypeMarshalBuffer buffer) throws CoreException { + int firstByte= ITypeMarshalBuffer.DEFERRED_CLASS_INSTANCE; + buffer.putByte((byte) firstByte); + buffer.marshalBinding(fClassTemplate); + buffer.putShort((short) fArguments.length); + for (ICPPTemplateArgument arg : fArguments) { + buffer.marshalTemplateArgument(arg); + } + } + + public static ICPPDeferredClassInstance unmarshal(IIndexFragment fragment, int firstByte, ITypeMarshalBuffer buffer) throws CoreException { + IBinding template= buffer.unmarshalBinding(); + int argcount= buffer.getShort() & 0xffff; + ICPPTemplateArgument[] args = new ICPPTemplateArgument[argcount]; + for (int i = 0; i < argcount; i++) { + args[i]= buffer.unmarshalTemplateArgument(); + } + return new PDOMCPPDeferredClassInstance(fragment, (ICPPClassTemplate) template, args); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunction.java similarity index 84% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownFunction.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunction.java index 90726a1e0a7..1e3fccf39e3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredFunction.java @@ -23,9 +23,9 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemType; /** * Represents a reference to a (member) function (instance), which cannot be resolved because - * it depends on a template parameter. A compiler would resolve it during instantiation. + * an argument depends on a template parameter. A compiler would resolve it during instantiation. */ -public class CPPUnknownFunction extends CPPUnknownBinding implements ICPPFunction { +public class CPPDeferredFunction extends CPPUnknownBinding implements ICPPFunction { private static final ICPPFunctionType FUNCTION_TYPE= new CPPFunctionType(ProblemType.UNKNOWN_FOR_EXPRESSION, IType.EMPTY_TYPE_ARRAY); @@ -33,11 +33,15 @@ public class CPPUnknownFunction extends CPPUnknownBinding implements ICPPFunctio if (sample instanceof ICPPConstructor) return new CPPUnknownConstructor(((ICPPConstructor) sample).getClassOwner()); - return new CPPUnknownFunction(sample.getOwner(), sample.getNameCharArray()); + final IBinding owner = sample.getOwner(); + return new CPPDeferredFunction(owner, sample.getNameCharArray()); } - public CPPUnknownFunction(IBinding owner, char[] name) { - super(owner, name); + private final IBinding fOwner; + + public CPPDeferredFunction(IBinding owner, char[] name) { + super(name); + fOwner= owner; } @Override @@ -119,4 +123,9 @@ public class CPPUnknownFunction extends CPPUnknownBinding implements ICPPFunctio public boolean hasParameterPack() { return false; } + + @Override + public IBinding getOwner() { + return fOwner; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java index 6b3fd5c7296..88d0455d02b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTemplateParameter.java @@ -70,7 +70,7 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement IASTNode[] nodes = getDeclarations(); if (nodes != null && nodes.length > 0) n = (IASTName) nodes[0]; - unknownScope = new CPPUnknownScope(this, n); + unknownScope = new CPPUnknownTypeScope(this, n); } return unknownScope; } @@ -232,11 +232,6 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement return ICPPTemplateInstance.EMPTY_TEMPLATE_INSTANCE_ARRAY; } - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } - @Override public boolean isAnonymous() { return false; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java index 9b2bf75ab72..33a193648bc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateTypeParameter.java @@ -48,7 +48,7 @@ public class CPPTemplateTypeParameter extends CPPTemplateParameter implements IASTNode[] nodes = getDeclarations(); if (nodes != null && nodes.length > 0) n = (IASTName) nodes[0]; - unknownScope = new CPPUnknownScope(this, n); + unknownScope = new CPPUnknownTypeScope(this, n); } return unknownScope; } @@ -92,9 +92,4 @@ public class CPPTemplateTypeParameter extends CPPTemplateParameter implements return getParameterID() == ((ICPPTemplateParameter) type).getParameterID(); } - - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java index 8726f18722f..c279433f0e2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java @@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ILinkage; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; @@ -29,16 +28,14 @@ import org.eclipse.core.runtime.PlatformObject; /** * Represents a binding that is unknown because it depends on template arguments. */ -public class CPPUnknownBinding extends PlatformObject +public abstract class CPPUnknownBinding extends PlatformObject implements ICPPUnknownBinding, ICPPInternalBinding, Cloneable { - protected IBinding fOwner; private ICPPScope unknownScope; - protected IASTName name; + protected char[] name; - public CPPUnknownBinding(IBinding owner, char[] name) { + public CPPUnknownBinding(char[] name) { super(); - this.name = new CPPASTName(name); - fOwner= owner; + this.name = name; } @Override @@ -76,12 +73,12 @@ public class CPPUnknownBinding extends PlatformObject @Override public String getName() { - return name.toString(); + return new String(name); } @Override public char[] getNameCharArray() { - return name.getSimpleID(); + return name; } @Override @@ -102,12 +99,16 @@ public class CPPUnknownBinding extends PlatformObject @Override public ICPPScope asScope() { - if (unknownScope == null) { - unknownScope = new CPPUnknownScope(this, name); - } + if (unknownScope == null && this instanceof ICPPUnknownType) { + unknownScope = createScope(); + } return unknownScope; } + protected CPPUnknownTypeScope createScope() { + return new CPPUnknownTypeScope((ICPPUnknownType) this, new CPPASTName(name)); + } + @Override public ILinkage getLinkage() { return Linkage.CPP_LINKAGE; @@ -126,14 +127,4 @@ public class CPPUnknownBinding extends PlatformObject public String toString() { return getName(); } - - @Override - public IASTName getUnknownName() { - return name; - } - - @Override - public IBinding getOwner() { - return fOwner; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java index 93a9386f9ce..12d96d5c75b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClassInstance.java @@ -12,21 +12,24 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; -import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.core.parser.util.CharArrayUtils; +import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPUnknownMemberClassInstance; +import org.eclipse.core.runtime.CoreException; /** * Represents a partially instantiated C++ class template, declaration of which is not yet available. * * @author Sergey Prigogin */ -public class CPPUnknownClassInstance extends CPPUnknownClass implements ICPPUnknownClassInstance { +public class CPPUnknownClassInstance extends CPPUnknownMemberClass implements ICPPUnknownMemberClassInstance { private final ICPPTemplateArgument[] arguments; - public CPPUnknownClassInstance(ICPPUnknownBinding scopeBinding, char[] name, ICPPTemplateArgument[] arguments) { + public CPPUnknownClassInstance(IType scopeBinding, char[] name, ICPPTemplateArgument[] arguments) { super(scopeBinding, name); this.arguments = arguments; } @@ -50,8 +53,8 @@ public class CPPUnknownClassInstance extends CPPUnknownClass implements ICPPUnkn return type.isSameType(this); } - if (type instanceof ICPPUnknownClassInstance) { - ICPPUnknownClassInstance rhs= (ICPPUnknownClassInstance) type; + if (type instanceof ICPPUnknownMemberClassInstance) { + ICPPUnknownMemberClassInstance rhs= (ICPPUnknownMemberClassInstance) type; if (CharArrayUtils.equals(getNameCharArray(), rhs.getNameCharArray())) { ICPPTemplateArgument[] lhsArgs= getArguments(); ICPPTemplateArgument[] rhsArgs= rhs.getArguments(); @@ -67,13 +70,36 @@ public class CPPUnknownClassInstance extends CPPUnknownClass implements ICPPUnkn return false; } } - final IBinding lhsContainer = getOwner(); - final IBinding rhsContainer = rhs.getOwner(); - if (lhsContainer instanceof IType && rhsContainer instanceof IType) { - return (((IType)lhsContainer).isSameType((IType) rhsContainer)); + final IType lhsContainer = getOwnerType(); + final IType rhsContainer = rhs.getOwnerType(); + if (lhsContainer != null && rhsContainer != null) { + return (lhsContainer.isSameType(rhsContainer)); } } } return false; } + + @Override + public void marshal(ITypeMarshalBuffer buffer) throws CoreException { + int firstByte= ITypeMarshalBuffer.UNKNOWN_MEMBER_CLASS_INSTANCE; + buffer.putByte((byte) firstByte); + buffer.marshalType(getOwnerType()); + buffer.putCharArray(getNameCharArray()); + buffer.putShort((short) arguments.length); + for (ICPPTemplateArgument arg : arguments) { + buffer.marshalTemplateArgument(arg); + } + } + + public static ICPPUnknownMemberClassInstance unmarshal(IIndexFragment fragment, int firstByte, ITypeMarshalBuffer buffer) throws CoreException { + IType owner= buffer.unmarshalType(); + char[] name = buffer.getCharArray(); + int argcount= buffer.getShort() & 0xffff; + ICPPTemplateArgument[] args = new ICPPTemplateArgument[argcount]; + for (int i = 0; i < argcount; i++) { + args[i]= buffer.unmarshalTemplateArgument(); + } + return new PDOMCPPUnknownMemberClassInstance(fragment, owner, name, args); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownConstructor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownConstructor.java index 4342c9035cb..0dd63fc488a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownConstructor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownConstructor.java @@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; * Represents a reference to a constructor (instance), which cannot be resolved because * it depends on a template parameter. A compiler would resolve it during instantiation. */ -public class CPPUnknownConstructor extends CPPUnknownFunction implements ICPPConstructor { +public class CPPUnknownConstructor extends CPPDeferredFunction implements ICPPConstructor { public CPPUnknownConstructor(ICPPClassType owner) { super(owner, owner.getNameCharArray()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownField.java new file mode 100644 index 00000000000..7d6fde70206 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownField.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser.cpp; + +import org.eclipse.cdt.core.dom.ast.ICompositeType; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.IValue; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; +import org.eclipse.cdt.internal.core.dom.parser.ProblemType; + +/** + * Represents a reference to a field, which cannot be resolved because the owner is + * unknown. A compiler would resolve it during instantiation. + */ +public class CPPUnknownField extends CPPUnknownMember implements ICPPField { + public CPPUnknownField(IType owner, char[] name) { + super(owner, name); + } + + @Override + public boolean isExternC() { + return false; + } + + @Override + public boolean isMutable() { + return false; + } + + @Override + public boolean isAuto() { + return false; + } + + @Override + public boolean isExtern() { + return false; + } + + @Override + public boolean isRegister() { + return false; + } + + @Override + public boolean isStatic() { + return false; + } + + @Override + public int getVisibility() { + return v_public; + } + @Override + public ICPPClassType getClassOwner() { + IType owner = getOwnerType(); + if (owner instanceof ICPPClassType) + return (ICPPClassType) owner; + return null; + } + + @Override + public ICompositeType getCompositeTypeOwner() { + IType owner = getOwnerType(); + if (owner instanceof ICompositeType) + return (ICompositeType) owner; + return null; + } + + @Override + public IType getType() { + return ProblemType.UNKNOWN_FOR_EXPRESSION; + } + + @Override + public IValue getInitialValue() { + return null; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMember.java new file mode 100644 index 00000000000..0866fd3d83f --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMember.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2004, 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Markus Schorn (Wind River Systems) + * Sergey Prigogin (Google) + *******************************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser.cpp; + +import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; +import org.eclipse.cdt.internal.core.dom.parser.ISerializableType; +import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPUnknownField; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPUnknownMethod; +import org.eclipse.core.runtime.CoreException; + +/** + * Represents a binding that is unknown because it depends on template arguments. + */ +public class CPPUnknownMember extends CPPUnknownBinding implements ICPPUnknownMember, ISerializableType { + protected IType fOwner; + + protected CPPUnknownMember(IType owner, char[] name) { + super(name); + fOwner= owner; + } + + @Override + public IBinding getOwner() { + if (fOwner instanceof IBinding) + return (IBinding) fOwner; + return null; + } + + @Override + public IType getOwnerType() { + return fOwner; + } + + @Override + public void marshal(ITypeMarshalBuffer buffer) throws CoreException { + int firstByte= ITypeMarshalBuffer.UNKNOWN_MEMBER; + if (this instanceof ICPPField) { + firstByte |= ITypeMarshalBuffer.FLAG1; + } else if (this instanceof ICPPMethod) { + firstByte |= ITypeMarshalBuffer.FLAG2; + } + + buffer.putByte((byte) firstByte); + buffer.marshalType(getOwnerType()); + buffer.putCharArray(getNameCharArray()); + } + + public static IBinding unmarshal(IIndexFragment fragment, int firstByte, ITypeMarshalBuffer buffer) throws CoreException { + IType owner= buffer.unmarshalType(); + char[] name = buffer.getCharArray(); + if ((firstByte & ITypeMarshalBuffer.FLAG1) != 0) { + return new PDOMCPPUnknownField(fragment, owner, name); + } else if ((firstByte & ITypeMarshalBuffer.FLAG2) != 0) { + return new PDOMCPPUnknownMethod(fragment, owner, name); + } + return new PDOMCPPUnknownMemberClass(fragment, owner, name); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClass.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMemberClass.java similarity index 80% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClass.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMemberClass.java index 4ee2e403c28..897c6c11e52 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownClass.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMemberClass.java @@ -29,13 +29,12 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; /** * Represents a C++ class, declaration of which is not yet available. */ -public class CPPUnknownClass extends CPPUnknownBinding implements ICPPUnknownClassType { - public static CPPUnknownClass createUnnamedInstance() { - return new CPPUnknownClass(null, CharArrayUtils.EMPTY); +public class CPPUnknownMemberClass extends CPPUnknownMember implements ICPPUnknownMemberClass { + public static CPPUnknownMemberClass createUnnamedInstance() { + return new CPPUnknownMemberClass(null, CharArrayUtils.EMPTY); } - - public CPPUnknownClass(IBinding binding, char[] name) { - super(binding, name); + public CPPUnknownMemberClass(IType owner, char[] name) { + super(owner, name); } @Override @@ -101,15 +100,13 @@ public class CPPUnknownClass extends CPPUnknownBinding implements ICPPUnknownCla if (type instanceof ITypedef) return type.isSameType(this); - if (type instanceof ICPPUnknownClassType - && !(type instanceof ICPPUnknownClassInstance) - && !(type instanceof ICPPDeferredClassInstance)) { - ICPPUnknownClassType rhs= (ICPPUnknownClassType) type; + if (type instanceof ICPPUnknownMemberClass && !(type instanceof ICPPUnknownMemberClassInstance)) { + ICPPUnknownMemberClass rhs= (ICPPUnknownMemberClass) type; if (CharArrayUtils.equals(getNameCharArray(), rhs.getNameCharArray())) { - final IBinding lhsContainer = getOwner(); - final IBinding rhsContainer = rhs.getOwner(); - if (lhsContainer instanceof IType && rhsContainer instanceof IType) { - return ((IType) lhsContainer).isSameType((IType) rhsContainer); + final IType lhsContainer = getOwnerType(); + final IType rhsContainer = rhs.getOwnerType(); + if (lhsContainer != null && rhsContainer != null) { + return lhsContainer.isSameType(rhsContainer); } } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMethod.java new file mode 100644 index 00000000000..761461b1881 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownMethod.java @@ -0,0 +1,159 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser.cpp; + +import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter; +import org.eclipse.cdt.internal.core.dom.parser.ProblemType; + +/** + * Represents a reference to a method (instance), which cannot be resolved because the owner is + * unknown. A compiler would resolve it during instantiation. + */ +public class CPPUnknownMethod extends CPPUnknownMember implements ICPPMethod { + private static final ICPPFunctionType FUNCTION_TYPE= + new CPPFunctionType(ProblemType.UNKNOWN_FOR_EXPRESSION, IType.EMPTY_TYPE_ARRAY); + + public CPPUnknownMethod(IType owner, char[] name) { + super(owner, name); + } + + @Override + public IType[] getExceptionSpecification() { + return null; + } + + @Override + public boolean isDeleted() { + return false; + } + + @Override + public boolean isExternC() { + return false; + } + + @Override + public boolean isInline() { + return false; + } + + @Override + public boolean isMutable() { + return false; + } + + @Override + public IScope getFunctionScope() { + return asScope(); + } + + @Override + public ICPPParameter[] getParameters() { + return ICPPParameter.EMPTY_CPPPARAMETER_ARRAY; + } + + @Override + public ICPPFunctionType getType() { + return FUNCTION_TYPE; + } + + @Override + public boolean isAuto() { + return false; + } + + @Override + public boolean isExtern() { + return false; + } + + @Override + public boolean isRegister() { + return false; + } + + @Override + public boolean isStatic() { + return false; + } + + @Override + public boolean takesVarArgs() { + return false; + } + + @Override + public boolean isNoReturn() { + return false; + } + + @Override + public int getRequiredArgumentCount() { + return 0; + } + + @Override + public boolean hasParameterPack() { + return false; + } + + @Override + public int getVisibility() { + return v_public; + } + @Override + public ICPPClassType getClassOwner() { + IType owner = getOwnerType(); + if (owner instanceof ICPPClassType) + return (ICPPClassType) owner; + return null; + } + + @Override + public boolean isVirtual() { + return false; + } + + @Override + public boolean isDestructor() { + return false; + } + + @Override + public boolean isImplicit() { + return false; + } + + @Override + public boolean isExplicit() { + return false; + } + + @Override + public boolean isPureVirtual() { + return false; + } + + @Override + public boolean isOverride() { + return false; + } + + @Override + public boolean isFinal() { + return false; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java deleted file mode 100644 index 7ac1111aead..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2010 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andrew Niefer (IBM Corporation) - initial API and implementation - * Markus Schorn (Wind River Systems) - * Bryan Wilkinson (QNX) - * Sergey Prigogin (Google) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.parser.cpp; - -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; - -/** - * Models the scope represented by an unknown binding such (e.g.: template type parameter). Used within - * the context of templates, only. - * For safe usage in index bindings, all fields need to be final or used in a thread-safe manner otherwise. - */ -public class CPPUnknownScope extends CPPUnknownTypeScope implements ICPPInternalUnknownScope { - /** - * This field needs to be protected when used in PDOMCPPUnknownScope, - * don't use it outside of {@link #getOrCreateBinding(IASTName, int)} - */ - private CharArrayObjectMap map; - - public CPPUnknownScope(ICPPUnknownBinding binding, IASTName name) { - super(name, binding); - } - - - @Override - public void addName(IASTName name) { - } - - @Override - protected IBinding getOrCreateBinding(final char[] name, int idx) { - if (map == null) - map = new CharArrayObjectMap(2); - - IBinding[] o = map.get(name); - if (o == null) { - o = new IBinding[3]; - map.put(name, o); - } - - IBinding result= o[idx]; - if (result == null) { - result= super.getOrCreateBinding(name, idx); - o[idx]= result; - } - return result; - } - - @Override - public void addBinding(IBinding binding) { - // do nothing, this is part of template magic and not a normal scope - } - - @Override - public void populateCache() {} - - @Override - public void removeNestedFromCache(IASTNode container) {} -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownTypeScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownTypeScope.java index 45f1bcdddcb..cb732f4d52b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownTypeScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownTypeScope.java @@ -21,28 +21,33 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.index.IIndexFileSet; +import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; /** * Models the scope represented by an unknown type (e.g.: typeof(template type parameter)). Used within * the context of templates, only. * For safe usage in index bindings, all fields need to be final or used in a thread-safe manner otherwise. */ -public class CPPUnknownTypeScope implements ICPPScope { +public class CPPUnknownTypeScope implements ICPPInternalUnknownScope { private final IASTName fName; - private final ICPPBinding fScopeBinding; + private final IType fScopeType; + /** + * This field needs to be protected when used in PDOMCPPUnknownScope, + * don't use it outside of {@link #getOrCreateBinding(IASTName, int)} + */ + private CharArrayObjectMap map; - public CPPUnknownTypeScope(IASTName name, ICPPBinding scopeBinding) { + public CPPUnknownTypeScope(IType scopeType, IASTName name) { fName= name; - fScopeBinding= scopeBinding; + fScopeType= scopeType; } @Override @@ -50,6 +55,7 @@ public class CPPUnknownTypeScope implements ICPPScope { return EScopeKind.eClassType; } + @Override public IASTNode getPhysicalNode() { return fName; } @@ -59,9 +65,16 @@ public class CPPUnknownTypeScope implements ICPPScope { return fName; } + @Override + public IType getScopeType() { + return fScopeType; + } + @Override public IScope getParent() throws DOMException { - return fScopeBinding == null ? null : fScopeBinding.getScope(); + if (fScopeType instanceof IBinding) + return ((IBinding) fScopeType).getScope(); + return null; } @Override @@ -106,6 +119,7 @@ public class CPPUnknownTypeScope implements ICPPScope { } else if (parent instanceof ICPPASTUsingDeclaration) { ICPPASTUsingDeclaration ud= (ICPPASTUsingDeclaration) parent; type= ud.isTypename(); + function= true; } if (!type && parent.getPropertyInParent() == IASTFunctionCallExpression.FUNCTION_NAME) { @@ -120,22 +134,6 @@ public class CPPUnknownTypeScope implements ICPPScope { return result; } - protected IBinding getOrCreateBinding(final char[] name, int idx) { - IBinding result= null; - switch (idx) { - case 0: - result= new CPPUnknownClass(fScopeBinding, name); - break; - case 1: - result= new CPPUnknownFunction(fScopeBinding, name); - break; - case 2: - result= new CPPUnknownBinding(fScopeBinding, name); - break; - } - return result; - } - @Override @Deprecated public final IBinding[] getBindings(IASTName name, boolean resolve, boolean prefix) { return getBindings(name, resolve, prefix, IIndexFileSet.EMPTY); @@ -149,8 +147,8 @@ public class CPPUnknownTypeScope implements ICPPScope { @Override public final IBinding[] getBindings(ScopeLookupData lookup) { if (lookup.isPrefixLookup()) { - if (fScopeBinding instanceof ICPPDeferredClassInstance) { - ICPPDeferredClassInstance instance = (ICPPDeferredClassInstance) fScopeBinding; + if (fScopeType instanceof ICPPDeferredClassInstance) { + ICPPDeferredClassInstance instance = (ICPPDeferredClassInstance) fScopeType; IScope scope = instance.getClassTemplate().getCompositeScope(); if (scope != null) { return scope.getBindings(lookup); @@ -167,12 +165,52 @@ public class CPPUnknownTypeScope implements ICPPScope { return new IBinding[] {getOrCreateBinding(lookup.getLookupKey(), 0)}; } - public ICPPBinding getScopeBinding() { - return fScopeBinding; - } - @Override public String toString() { return fName.toString(); } + + @Override + public void addName(IASTName name) { + } + + protected IBinding getOrCreateBinding(final char[] name, int idx) { + if (map == null) + map = new CharArrayObjectMap(2); + + IBinding[] o = map.get(name); + if (o == null) { + o = new IBinding[3]; + map.put(name, o); + } + + IBinding result= o[idx]; + if (result == null) { + switch (idx) { + case 0: + result= new CPPUnknownMemberClass(fScopeType, name); + break; + case 1: + result= new CPPUnknownMethod(fScopeType, name); + break; + case 2: + result= new CPPUnknownField(fScopeType, name); + break; + } + o[idx]= result; + } + return result; + } + + @Override + public void addBinding(IBinding binding) { + // do nothing, this is part of template magic and not a normal scope + } + + @Override + public void populateCache() {} + + @Override + public void removeNestedFromCache(IASTNode container) {} + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPDeferredClassInstance.java index c6017e6a0f4..a3926df5e41 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPDeferredClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPDeferredClassInstance.java @@ -12,13 +12,14 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap; /** * Interface for deferred class template instances. */ -public interface ICPPDeferredClassInstance extends ICPPUnknownClassType, ICPPTemplateInstance { +public interface ICPPDeferredClassInstance extends ICPPUnknownBinding, ICPPUnknownType, ICPPClassType, ICPPTemplateInstance { /** * Returns the class template for the deferred instantiation. */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownScope.java index 53382f9d8f8..d5ad3680571 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPInternalUnknownScope.java @@ -11,7 +11,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; +import org.eclipse.cdt.core.dom.ast.IType; /** * Scope corresponding to an unknown binding. @@ -21,5 +21,5 @@ public interface ICPPInternalUnknownScope extends ICPPASTInternalScope { /** * @return Returns the binding corresponding to the scope. */ - public abstract ICPPBinding getScopeBinding(); + public IType getScopeType(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownBinding.java index 4d41e4df2f0..a18fb740290 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownBinding.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; @@ -26,10 +25,4 @@ public interface ICPPUnknownBinding extends ICPPBinding { * @throws DOMException */ public ICPPScope asScope() throws DOMException; - - /** - * Returns a the name of the unknown binding that has to be searched in the parent scope. - * The ast-node may not be rooted in an ast-tree. May be null. - */ - public IASTName getUnknownName(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMember.java new file mode 100644 index 00000000000..71b57e75e12 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMember.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2008, 2009 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser.cpp; + +import org.eclipse.cdt.core.dom.ast.IType; + +/** + * Represents the binding for a dependent name within a template declaration. + */ +public interface ICPPUnknownMember extends ICPPUnknownBinding { + /** + * For unknown bindings the owner may just be an unknown type that is not yet resolved to a binding. + */ + public IType getOwnerType(); +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClass.java similarity index 89% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassType.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClass.java index aaecce2d77a..d1af9bfa31e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClass.java @@ -19,5 +19,5 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; * This interface should be made public. * @since 5.0 */ -public interface ICPPUnknownClassType extends ICPPUnknownBinding, ICPPUnknownType, ICPPClassType { +public interface ICPPUnknownMemberClass extends ICPPUnknownMember, ICPPUnknownType, ICPPClassType { } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClassInstance.java similarity index 92% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassInstance.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClassInstance.java index daef1004737..b0d4a19d5a5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPUnknownMemberClassInstance.java @@ -19,7 +19,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; * This interface should be made public. * @since 5.0 */ -public interface ICPPUnknownClassInstance extends ICPPUnknownClassType { +public interface ICPPUnknownMemberClassInstance extends ICPPUnknownMemberClass { /** * Returns the arguments of the instantiation */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java index 35dd49ec54b..d12987b8e68 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/BaseClassLookup.java @@ -255,7 +255,7 @@ class BaseClassLookup { if (nbase instanceof IProblemBinding) continue; - final IName nbaseName = nbase.getBaseClassSpecifierName(); + final IName nbaseName = nbase.getClassDefinitionName(); int cmp= baseName == null ? 0 : CPPSemantics.compareByRelevance(data, baseName, nbaseName); if (cmp <= 0) { if (cmp < 0) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPFunctionSet.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPFunctionSet.java index f92fcf3d165..8d1842259e7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPFunctionSet.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPFunctionSet.java @@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.Linkage; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownFunction; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPTwoPhaseBinding; /** @@ -92,7 +92,7 @@ public class CPPFunctionSet implements ICPPTwoPhaseBinding { public void setToUnknown() { if (fName != null) { - fName.setBinding(new CPPUnknownFunction(null, fName.toCharArray())); + fName.setBinding(new CPPDeferredFunction(null, fName.toCharArray())); } } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 79be7bacf19..911a2b5d42c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -190,6 +190,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBuiltinParameter; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPCompositeBinding; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPImplicitFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespace; @@ -197,10 +198,9 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespaceScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClass; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownConstructor; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownFunction; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMethod; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUsingDeclaration; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUsingDirective; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable; @@ -212,7 +212,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalNamespaceScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates.TypeSelection; @@ -447,12 +446,12 @@ public class CPPSemantics { final ASTNodeProperty namePropertyInParent = name.getPropertyInParent(); if (binding == null && data.skippedScope != null) { if (data.hasFunctionArguments()) { - binding= new CPPUnknownFunction(data.skippedScope, name.getSimpleID()); + binding= new CPPDeferredFunction(data.skippedScope, name.getSimpleID()); } else { if (namePropertyInParent == IASTNamedTypeSpecifier.NAME) { - binding= new CPPUnknownClass(data.skippedScope, name.getSimpleID()); + binding= new CPPUnknownMemberClass(data.skippedScope, name.getSimpleID()); } else { - binding= new CPPUnknownBinding(data.skippedScope, name.getSimpleID()); + binding= new CPPUnknownMethod(data.skippedScope, name.getSimpleID()); } } } @@ -2388,7 +2387,7 @@ public class CPPSemantics { if (viableCount == 1) return fns[0]; setTargetedFunctionsToUnknown(argTypes); - return CPPUnknownFunction.createForSample(fns[0]); + return CPPDeferredFunction.createForSample(fns[0]); } IFunction[] ambiguousFunctions= null; // ambiguity, 2 functions are equally good @@ -2448,7 +2447,7 @@ public class CPPSemantics { return null; setTargetedFunctionsToUnknown(argTypes); - return CPPUnknownFunction.createForSample(unknownFunction); + return CPPDeferredFunction.createForSample(unknownFunction); } if (ambiguousFunctions != null) { @@ -3096,7 +3095,7 @@ public class CPPSemantics { type = SemanticUtil.getNestedType(((ICPPVariable) binding).getType(), TDEF | CVTYPE); if (!(type instanceof ICPPClassType)) return null; - if (type instanceof ICPPClassTemplate || type instanceof ICPPUnknownClassType || type instanceof ISemanticProblem) + if (type instanceof ICPPClassTemplate || type instanceof ICPPUnknownType || type instanceof ISemanticProblem) return null; final ICPPClassType classType = (ICPPClassType) type; @@ -3676,9 +3675,8 @@ public class CPPSemantics { } protected static IBinding resolveUnknownName(IScope scope, ICPPUnknownBinding unknown, IASTNode point) { - final IASTName unknownName = unknown.getUnknownName(); - LookupData data = unknownName.getTranslationUnit() != null ? - new LookupData(unknownName) : new LookupData(unknownName.getSimpleID(), null, point); + final char[] unknownName = unknown.getNameCharArray(); + LookupData data = new LookupData(unknownName, null, point); data.setIgnorePointOfDeclaration(true); data.typesOnly= unknown instanceof IType; @@ -3701,7 +3699,7 @@ public class CPPSemantics { } // 4: Normal post processing is not possible, because the name is not rooted in AST if (binding == null) - binding = new ProblemBinding(unknownName, point, IProblemBinding.SEMANTIC_NAME_NOT_FOUND); + binding = new ProblemBinding(new CPPASTName(unknownName), point, IProblemBinding.SEMANTIC_NAME_NOT_FOUND); return binding; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 37f1bc4c148..59ad404d4ba 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -41,7 +41,6 @@ import org.eclipse.cdt.core.dom.ast.IArrayType; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumerator; -import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IPointerType; import org.eclipse.cdt.core.dom.ast.IProblemBinding; @@ -102,6 +101,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.Value; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPArrayType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassSpecialization; @@ -112,6 +112,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPConstructorInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPConstructorSpecialization; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPConstructorTemplateSpecialization; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFieldSpecialization; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionSpecialization; @@ -131,10 +132,9 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTemplateParameter import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeArgument; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateTypeParameter; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTypedefSpecialization; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClass; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownFunction; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMethod; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUsingDeclarationSpecialization; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPASTInternalTemplateDeclaration; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; @@ -143,8 +143,9 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInstanceCache; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalClassTemplate; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMember; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.Conversions.Context; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.Conversions.UDCMode; @@ -649,13 +650,11 @@ public class CPPTemplates { template= template.getOwner(); } - if (template instanceof ICPPUnknownClassType) { - IBinding owner= template.getOwner(); - if (owner instanceof ICPPUnknownBinding) { - ICPPTemplateArgument[] args= createTemplateArgumentArray(id); - args= SemanticUtil.getSimplifiedArguments(args); - return new CPPUnknownClassInstance((ICPPUnknownBinding) template.getOwner(), id.getSimpleID(), args); - } + if (template instanceof ICPPUnknownMemberClass) { + IType owner= ((ICPPUnknownMemberClass)template).getOwnerType(); + ICPPTemplateArgument[] args= createTemplateArgumentArray(id); + args= SemanticUtil.getSimplifiedArguments(args); + return new CPPUnknownClassInstance(owner, id.getSimpleID(), args); } if (!(template instanceof ICPPClassTemplate) || template instanceof ICPPClassTemplatePartialSpecialization) @@ -1143,29 +1142,7 @@ public class CPPTemplates { } if (type instanceof ICPPTemplateParameter) { - final ICPPTemplateParameter tpar = (ICPPTemplateParameter) type; - ICPPTemplateArgument arg= null; - if (tpar.isParameterPack()) { - if (packOffset >= 0) { - ICPPTemplateArgument[] args = tpMap.getPackExpansion(tpar); - if (args != null) { - if (packOffset >= args.length) { - return new ProblemBinding(point, IProblemBinding.SEMANTIC_INVALID_TYPE, - tpar.getNameCharArray()); - } - arg= args[packOffset]; - } - } - } else { - arg= tpMap.getArgument(tpar); - } - - if (arg != null) { - IType t= arg.getTypeValue(); - if (t != null) - return t; - } - return type; + return resolveTemplateTypeParameter((ICPPTemplateParameter) type, tpMap, packOffset, point); } if (type instanceof ICPPUnknownBinding) { @@ -1266,6 +1243,32 @@ public class CPPTemplates { } } + public static IType resolveTemplateTypeParameter(final ICPPTemplateParameter tpar, + ICPPTemplateParameterMap tpMap, int packOffset, IASTNode point) { + ICPPTemplateArgument arg= null; + if (tpar.isParameterPack()) { + if (packOffset >= 0) { + ICPPTemplateArgument[] args = tpMap.getPackExpansion(tpar); + if (args != null) { + if (packOffset >= args.length) { + return new ProblemBinding(point, IProblemBinding.SEMANTIC_INVALID_TYPE, + tpar.getNameCharArray()); + } + arg= args[packOffset]; + } + } + } else { + arg= tpMap.getArgument(tpar); + } + + if (arg != null) { + IType t= arg.getTypeValue(); + if (t != null) + return t; + } + return (IType) tpar; + } + /** * Checks whether a given name corresponds to a template declaration and returns the AST node * for it. This works for the name of a template-definition and also for a name needed to @@ -1700,11 +1703,11 @@ public class CPPTemplates { ICPPFunctionTemplate template= (ICPPFunctionTemplate) func; try { if (containsDependentType(fnArgs)) - return new ICPPFunction[] {CPPUnknownFunction.createForSample(template)}; + return new ICPPFunction[] {CPPDeferredFunction.createForSample(template)}; if (requireTemplate) { if (hasDependentArgument(tmplArgs)) - return new ICPPFunction[] {CPPUnknownFunction.createForSample(template)}; + return new ICPPFunction[] {CPPDeferredFunction.createForSample(template)}; } } catch (DOMException e) { return NO_FUNCTIONS; @@ -1776,7 +1779,7 @@ public class CPPTemplates { if (!checkedForDependentType) { try { if (isDependentType(conversionType)) { - inst= CPPUnknownFunction.createForSample(template); + inst= CPPDeferredFunction.createForSample(template); done= true; } checkedForDependentType= true; @@ -1840,7 +1843,7 @@ public class CPPTemplates { ICPPTemplateArgument[] args, IASTNode point) { try { if (target != null && isDependentType(target)) { - return CPPUnknownFunction.createForSample(template); + return CPPDeferredFunction.createForSample(template); } if (template instanceof ICPPConstructor || args == null) @@ -2412,47 +2415,57 @@ public class CPPTemplates { if (unknown instanceof ICPPDeferredClassInstance) { return resolveDeferredClassInstance((ICPPDeferredClassInstance) unknown, tpMap, packOffset, within, point); } - - final IBinding owner= unknown.getOwner(); - if (!(owner instanceof ICPPTemplateTypeParameter || owner instanceof ICPPUnknownClassType)) + if (unknown instanceof ICPPUnknownMember) { + return resolveUnknownMember((ICPPUnknownMember) unknown, tpMap, packOffset, within, point); + } + if (unknown instanceof ICPPTemplateParameter && unknown instanceof IType) { + IType type= resolveTemplateTypeParameter((ICPPTemplateParameter) unknown, tpMap, packOffset, point); + if (type instanceof IBinding) + return (IBinding) type; + } + return unknown; + } + + private static IBinding resolveUnknownMember(ICPPUnknownMember unknown, ICPPTemplateParameterMap tpMap, + int packOffset, ICPPClassSpecialization within, IASTNode point) throws DOMException { + final IType ot0= unknown.getOwnerType(); + if (ot0 == null) return unknown; IBinding result = unknown; - IType t = CPPTemplates.instantiateType((IType) owner, tpMap, packOffset, within, point); - if (t != null) { - t = SemanticUtil.getUltimateType(t, false); - if (t instanceof ICPPUnknownBinding) { - if (unknown instanceof ICPPUnknownClassInstance) { - ICPPUnknownClassInstance ucli= (ICPPUnknownClassInstance) unknown; - final ICPPTemplateArgument[] arguments = ucli.getArguments(); - ICPPTemplateArgument[] newArgs = CPPTemplates.instantiateArguments(arguments, tpMap, packOffset, within, point); - if (!t.equals(owner) && newArgs != arguments) { - newArgs= SemanticUtil.getSimplifiedArguments(newArgs); - result= new CPPUnknownClassInstance((ICPPUnknownBinding) t, ucli.getNameCharArray(), newArgs); + IType ot1 = CPPTemplates.instantiateType(ot0, tpMap, packOffset, within, point); + if (ot1 != null) { + ot1 = SemanticUtil.getUltimateType(ot1, false); + if (ot1 instanceof ICPPUnknownType) { + if (unknown instanceof ICPPUnknownMemberClassInstance) { + ICPPUnknownMemberClassInstance ucli= (ICPPUnknownMemberClassInstance) unknown; + ICPPTemplateArgument[] args0 = ucli.getArguments(); + ICPPTemplateArgument[] args1 = CPPTemplates.instantiateArguments(args0, tpMap, packOffset, within, point); + if (args0 != args1 || !ot1.isSameType(ot0)) { + args1= SemanticUtil.getSimplifiedArguments(args1); + result= new CPPUnknownClassInstance(ot1, ucli.getNameCharArray(), args1); } - } else if (!t.equals(owner)) { - if (unknown instanceof ICPPUnknownClassType) { - result= new CPPUnknownClass((ICPPUnknownBinding) t, unknown.getNameCharArray()); - } else if (unknown instanceof IFunction) { - result= new CPPUnknownClass((ICPPUnknownBinding) t, unknown.getNameCharArray()); + } else if (!ot1.isSameType(ot0)) { + if (unknown instanceof ICPPUnknownMemberClass) { + result= new CPPUnknownMemberClass(ot1, unknown.getNameCharArray()); } else { - result= new CPPUnknownBinding((ICPPUnknownBinding) t, unknown.getNameCharArray()); + result= new CPPUnknownMethod(ot1, unknown.getNameCharArray()); } } - } else if (t instanceof ICPPClassType) { - IScope s = ((ICPPClassType) t).getCompositeScope(); + } else if (ot1 instanceof ICPPClassType) { + IScope s = ((ICPPClassType) ot1).getCompositeScope(); if (s != null) { result= CPPSemantics.resolveUnknownName(s, unknown, point); - if (unknown instanceof ICPPUnknownClassInstance && result instanceof ICPPTemplateDefinition) { - ICPPTemplateArgument[] newArgs = CPPTemplates.instantiateArguments( - ((ICPPUnknownClassInstance) unknown).getArguments(), tpMap, packOffset, within, point); + if (unknown instanceof ICPPUnknownMemberClassInstance && result instanceof ICPPTemplateDefinition) { + ICPPTemplateArgument[] args1 = CPPTemplates.instantiateArguments( + ((ICPPUnknownMemberClassInstance) unknown).getArguments(), tpMap, packOffset, within, point); if (result instanceof ICPPClassTemplate) { - result = instantiate((ICPPClassTemplate) result, newArgs, point); + result = instantiate((ICPPClassTemplate) result, args1, point); } } } - } else if (t != owner) { - return new ProblemBinding(unknown.getUnknownName(), point, IProblemBinding.SEMANTIC_BAD_SCOPE); + } else if (ot1 != ot0) { + return new ProblemBinding(new CPPASTName(unknown.getNameCharArray()), point, IProblemBinding.SEMANTIC_BAD_SCOPE); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 156131e6509..31ad69b6196 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -235,8 +235,6 @@ public class CPPVisitor extends ASTQueries { return new HashSet(); } }; - private static final ICPPScope UNKNOWN_TYPE_SCOPE = new CPPUnknownTypeScope(new CPPASTName("".toCharArray()), null); //$NON-NLS-1$ - public static IBinding createBinding(IASTName name) { IASTNode parent = name.getParent(); IBinding binding = null; @@ -1226,7 +1224,7 @@ public class CPPVisitor extends ASTQueries { } else if (type instanceof ICPPUnknownBinding) { return ((ICPPUnknownBinding) type).asScope(); } else if (type instanceof ICPPUnknownType) { - return UNKNOWN_TYPE_SCOPE; + return new CPPUnknownTypeScope(type, null); } else { return new CPPScope.CPPScopeProblem(name, ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index 7e164f70ecd..b453f05c653 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -46,7 +46,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.Value; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; @@ -194,7 +194,7 @@ public class EvalMemberAccess extends CPPEvaluation { } if (CPPTemplates.isDependentType(type)) - return returnUnnamed ? CPPUnknownClass.createUnnamedInstance() : null; + return returnUnnamed ? CPPUnknownMemberClass.createUnnamedInstance() : null; return new ProblemType(ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexCPPBindingConstants.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexCPPBindingConstants.java index adc31d84c7b..ac8795b0018 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexCPPBindingConstants.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexCPPBindingConstants.java @@ -57,6 +57,7 @@ public interface IIndexCPPBindingConstants { int CPP_FRIEND_DECLARATION = IIndexBindingConstants.LAST_CONSTANT + 45; int CPP_TEMPLATE_TEMPLATE_PARAMETER= IIndexBindingConstants.LAST_CONSTANT + 46; int CPP_CLASS_TEMPLATE_PARTIAL_SPEC_SPEC = IIndexBindingConstants.LAST_CONSTANT + 47; - int CPP_UNKNOWN_BINDING = IIndexBindingConstants.LAST_CONSTANT + 48; + int CPP_UNKNOWN_FIELD = IIndexBindingConstants.LAST_CONSTANT + 48; int CPP_USING_DECLARATION_SPECIALIZATION= IIndexBindingConstants.LAST_CONSTANT + 49; + int CPP_UNKNOWN_METHOD = IIndexBindingConstants.LAST_CONSTANT + 50; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragmentBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragmentBinding.java index 61f6e0ac56a..05621a776a3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragmentBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragmentBinding.java @@ -61,7 +61,7 @@ public interface IIndexFragmentBinding extends IIndexBinding { IIndexFragmentBinding getOwner(); /** - * Returns a unique id for the binding within the fragment + * Returns a unique id for the binding within the fragment, or null for unknown bindings. * @since 5.1 */ long getBindingID(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexCPPSignatureUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexCPPSignatureUtil.java index 21c2372beaa..daed2973029 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexCPPSignatureUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexCPPSignatureUtil.java @@ -33,7 +33,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; import org.eclipse.core.runtime.CoreException; @@ -60,8 +60,8 @@ public class IndexCPPSignatureUtil { if (binding instanceof ICPPTemplateInstance) { ICPPTemplateInstance inst = (ICPPTemplateInstance) binding; buffer.append(getTemplateArgString(inst.getTemplateArguments(), true)); - } else if (binding instanceof ICPPUnknownClassInstance) { - ICPPUnknownClassInstance inst = (ICPPUnknownClassInstance) binding; + } else if (binding instanceof ICPPUnknownMemberClassInstance) { + ICPPUnknownMemberClassInstance inst = (ICPPUnknownMemberClassInstance) binding; buffer.append(getTemplateArgString(inst.getArguments(), true)); } else if (binding instanceof ICPPClassTemplatePartialSpecialization) { ICPPClassTemplatePartialSpecialization partial = (ICPPClassTemplatePartialSpecialization) binding; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/AbstractCompositeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/AbstractCompositeFactory.java index 0017b69df52..a1b125667a9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/AbstractCompositeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/AbstractCompositeFactory.java @@ -31,7 +31,7 @@ import org.eclipse.core.runtime.CoreException; */ public abstract class AbstractCompositeFactory implements ICompositesFactory { protected IIndex index; - private Comparator fragmentComparator; + private final Comparator fragmentComparator; public AbstractCompositeFactory(IIndex index) { this.index= index; @@ -135,7 +135,7 @@ public abstract class AbstractCompositeFactory implements ICompositesFactory { } private static class FragmentBindingComparator implements Comparator { - private IIndexFragmentBindingComparator[] comparators; + private final IIndexFragmentBindingComparator[] comparators; FragmentBindingComparator(IIndexFragmentBindingComparator[] comparators) { this.comparators= comparators; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index 1108417de68..90a74285f94 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.index.composite.cpp; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IArrayType; import org.eclipse.cdt.core.dom.ast.IBasicType; import org.eclipse.cdt.core.dom.ast.IBinding; @@ -67,10 +66,10 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPClassSpecializationScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMember; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownMemberClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPFunctionSet; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinary; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinaryTypeId; @@ -129,11 +128,6 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { } return new CompositeCPPNamespaceScope(this, namespaces); } - if (rscope instanceof ICPPInternalUnknownScope) { - ICPPInternalUnknownScope uscope= (ICPPInternalUnknownScope) rscope; - final ICPPBinding binding = uscope.getScopeBinding(); - return new CompositeCPPUnknownScope((CompositeCPPBinding) getCompositeBinding((IIndexFragmentBinding) binding), (IASTName) uscope.getPhysicalNode()); - } throw new CompositingNotImplementedError(rscope.getClass().getName()); } catch(CoreException ce) { CCorePlugin.log(ce); @@ -334,7 +328,12 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { ICPPTemplateArgument[] c = e.getTemplateArgs(); ICPPEvaluation a2 = getCompositeEvaluation(a); - IIndexBinding b2 = getCompositeBinding((IIndexFragmentBinding) b); + IBinding b2= b; + if (b instanceof IIndexFragmentBinding) { + b2 = getCompositeBinding((IIndexFragmentBinding) b); + } else if (b instanceof IType) { + b2 = (IBinding) getCompositeType((IType) b); + } ICPPTemplateArgument[] c2 = TemplateInstanceUtil.convert(this, c); if (a != a2 || b != b2 || c != c2) @@ -464,7 +463,13 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { } else if (binding instanceof ICPPSpecialization) { if (binding instanceof ICPPTemplateInstance) { if (binding instanceof ICPPDeferredClassInstance) { - return new CompositeCPPDeferredClassInstance(this, (ICPPDeferredClassInstance) findOneBinding(binding)); + ICPPDeferredClassInstance def= (ICPPDeferredClassInstance) binding; + ICPPClassTemplate t0= def.getClassTemplate(); + ICPPTemplateArgument[] args0= def.getTemplateArguments(); + + ICPPClassTemplate t= (ICPPClassTemplate) getCompositeType(t0); + ICPPTemplateArgument[] args = TemplateInstanceUtil.convert(this, args0); + return new CompositeCPPDeferredClassInstance(t, args); } else { if (binding instanceof ICPPClassType) { return new CompositeCPPClassInstance(this, (ICPPClassType) findOneBinding(binding)); @@ -545,13 +550,24 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { } else if (binding instanceof ICPPVariable) { result = new CompositeCPPVariable(this, (ICPPVariable) binding); } else if (binding instanceof ICPPUnknownBinding) { - if (binding instanceof ICPPUnknownClassInstance) { - result = new CompositeCPPUnknownClassInstance(this, (ICPPUnknownClassInstance) binding); - } else if (binding instanceof ICPPUnknownClassType) { - result = new CompositeCPPUnknownClassType(this, (ICPPUnknownClassType) binding); - } else { - result= new CompositeCPPUnknownBinding(this, (ICPPUnknownBinding) binding); + if (binding instanceof ICPPUnknownMember) { + ICPPUnknownMember def= (ICPPUnknownMember) binding; + IType b= getCompositeType(def.getOwnerType()); + if (binding instanceof ICPPUnknownMemberClass) { + if (binding instanceof ICPPUnknownMemberClassInstance) { + ICPPTemplateArgument[] args0= ((ICPPUnknownMemberClassInstance) binding).getArguments(); + ICPPTemplateArgument[] args = TemplateInstanceUtil.convert(this, args0); + return new CompositeCPPUnknownMemberClassInstance(b, def.getNameCharArray(), args); + } else { + return new CompositeCPPUnknownMemberClass(b, def.getNameCharArray()); + } + } else if (binding instanceof ICPPField) { + return new CompositeCPPUnknownField(b, def.getNameCharArray()); + } else if (binding instanceof ICPPMethod) { + return new CompositeCPPUnknownMethod(b, def.getNameCharArray()); + } } + throw new CompositingNotImplementedError("composite binding unavailable for " + binding + " " + binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$ } else if (binding instanceof ICPPClassType) { ICPPClassType def = (ICPPClassType) findOneBinding(binding); result = def == null ? null : new CompositeCPPClassType(this, def); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPClassType.java index f1472722205..ed9cb9031c8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPClassType.java @@ -13,6 +13,9 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.index.composite.cpp; +import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; +import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType; + import java.util.Arrays; import org.eclipse.cdt.core.dom.IName; @@ -51,9 +54,9 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType } private class CPPBaseDelegate implements ICPPBase { - private ICPPBase base; - private IBinding baseClass; - private boolean writable; + private final ICPPBase base; + private IType baseClass; + private final boolean writable; CPPBaseDelegate(ICPPBase b) { this(b, false); @@ -66,17 +69,30 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType @Override public IBinding getBaseClass() { - if (baseClass != null) { - return baseClass; - } else { - return cf.getCompositeBinding((IIndexFragmentBinding) base.getBaseClass()); - } + IType type= getBaseClassType(); + type = getNestedType(type, TDEF); + if (type instanceof IBinding) + return (IBinding) type; + return null; } @Override + public IType getBaseClassType() { + if (baseClass == null) { + baseClass= cf.getCompositeType(base.getBaseClassType()); + } + return baseClass; + } + + @Override @Deprecated public IName getBaseClassSpecifierName() { return base.getBaseClassSpecifierName(); } + + @Override + public IName getClassDefinitionName() { + return base.getClassDefinitionName(); + } @Override public int getVisibility() { @@ -90,13 +106,22 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType @Override public void setBaseClass(IBinding binding) { + if (writable && binding instanceof IType) { + baseClass= (IType) binding; + } else { + base.setBaseClass(binding); + } + } + + @Override + public void setBaseClass(IType binding) { if (writable) { baseClass= binding; } else { base.setBaseClass(binding); } } - + @Override public ICPPBase clone(){ return new CPPBaseDelegate(base, true); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPDeferredClassInstance.java index 90c582a119a..1d88a2bd301 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPDeferredClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPDeferredClassInstance.java @@ -1,102 +1,58 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Symbian Software Systems and others. + * Copyright (c) 2012 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Andrew Ferguson (Symbian) - Initial implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ + * Markus Schorn - initial API and implementation + *******************************************************************************/ + package org.eclipse.cdt.internal.core.index.composite.cpp; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap; -import org.eclipse.cdt.core.parser.util.ObjectMap; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; -import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; -import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory; +import org.eclipse.cdt.core.index.IIndexBinding; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; -public class CompositeCPPDeferredClassInstance extends CompositeCPPClassType implements ICPPDeferredClassInstance { - - private ICPPScope unknownScope; - - public CompositeCPPDeferredClassInstance(ICompositesFactory cf, ICPPDeferredClassInstance rbinding) { - super(cf, rbinding); +public class CompositeCPPDeferredClassInstance extends CPPDeferredClassInstance implements IIndexBinding { + public CompositeCPPDeferredClassInstance(ICPPClassTemplate template, ICPPTemplateArgument[] args) { + super(template, args); } @Override - public ICPPTemplateDefinition getTemplateDefinition() { - ICPPTemplateDefinition preresult= ((ICPPTemplateInstance)rbinding).getTemplateDefinition(); - return (ICPPTemplateDefinition) cf.getCompositeBinding((IIndexFragmentBinding)preresult); - } - - @Override - public ICPPConstructor[] getConstructors() { - return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY; - } - - @Override - public ICPPTemplateParameterMap getTemplateParameterMap() { - return TemplateInstanceUtil.getTemplateParameterMap(cf, (ICPPTemplateInstance) rbinding); - } - - @Override - public IBinding getSpecializedBinding() { - return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); - } - - @Override - public IASTName getUnknownName() { - return ((ICPPDeferredClassInstance) rbinding).getUnknownName(); - } - - @Override - public ICPPScope getCompositeScope() { - return asScope(); - } - - @Override - public ICPPScope asScope() { - if (unknownScope == null) { - unknownScope= new CompositeCPPUnknownScope(this, getUnknownName()); - } - return unknownScope; - } - - @Override - public ICPPClassTemplate getClassTemplate() { - return (ICPPClassTemplate) cf.getCompositeBinding((IIndexFragmentBinding) ((ICPPDeferredClassInstance) rbinding).getClassTemplate()); - } - - @Override - public ICPPTemplateArgument[] getTemplateArguments() { - return TemplateInstanceUtil.getTemplateArguments(cf, (ICPPTemplateInstance) rbinding); - } - - @Override - public boolean isExplicitSpecialization() { + public boolean isFileLocal() throws CoreException { return false; } @Override - @Deprecated - public IType[] getArguments() { - return TemplateInstanceUtil.getArguments(cf, (ICPPTemplateInstance) rbinding); + public IIndexFile getLocalToFile() throws CoreException { + return null; } @Override - @Deprecated - public ObjectMap getArgumentMap() { - return TemplateInstanceUtil.getArgumentMap(cf, rbinding); + public IIndexBinding getOwner() { + return (IIndexBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } + + @Override + protected CPPUnknownTypeScope createScope() { + return new CompositeCPPUnknownScope(this, new CPPASTName(getNameCharArray())); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTemplateParameter.java index d7b1627364d..6bc1614d334 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTemplateParameter.java @@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.index.composite.cpp; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; @@ -82,15 +81,10 @@ public class CompositeCPPTemplateTemplateParameter extends CompositeCPPBinding @Override public ICPPScope asScope() { if (unknownScope == null) { - unknownScope= new CompositeCPPUnknownScope(this, getUnknownName()); + unknownScope= new CompositeCPPUnknownScope(this, new CPPASTName(getNameCharArray())); } return unknownScope; } - - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } @Override public ICPPTemplateArgument getDefaultValue() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTypeParameter.java index 858785c5604..61d65f32f65 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTypeParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPTemplateTypeParameter.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.index.composite.cpp; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; @@ -72,16 +71,11 @@ public class CompositeCPPTemplateTypeParameter extends CompositeCPPBinding @Override public ICPPScope asScope() { if (unknownScope == null) { - unknownScope= new CompositeCPPUnknownScope(this, getUnknownName()); + unknownScope= new CompositeCPPUnknownScope(this, new CPPASTName(getNameCharArray())); } return unknownScope; } - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } - @Override public ICPPTemplateArgument getDefaultValue() { try { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownBinding.java deleted file mode 100644 index 4d548c08151..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownBinding.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Wind River Systems, Inc. and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.index.composite.cpp; - -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory; - -class CompositeCPPUnknownBinding extends CompositeCPPBinding implements ICPPUnknownBinding { - public CompositeCPPUnknownBinding(ICompositesFactory cf, ICPPUnknownBinding rbinding) { - super(cf, rbinding); - } - - @Override - public Object clone() { - fail(); return null; - } - - @Override - public ICPPScope asScope() { - return null; - } - - @Override - public IASTName getUnknownName() { - return ((ICPPUnknownBinding) rbinding).getUnknownName(); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java deleted file mode 100644 index 78c5cb2d04e..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassInstance.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Sergey Prigogin (Google) - initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.index.composite.cpp; - -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory; - -/** - * @author Sergey Prigogin - */ -class CompositeCPPUnknownClassInstance extends CompositeCPPUnknownClassType - implements ICPPUnknownClassInstance { - - public CompositeCPPUnknownClassInstance(ICompositesFactory cf, - ICPPUnknownClassInstance rbinding) { - super(cf, rbinding); - } - - @Override - public ICPPTemplateArgument[] getArguments() { - ICPPTemplateArgument[] arguments = ((ICPPUnknownClassInstance) rbinding).getArguments(); - return TemplateInstanceUtil.convert(cf, arguments); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassType.java deleted file mode 100644 index 0cb08498daa..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownClassType.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Sergey Prigogin (Google) - initial API and implementation - * Markus Schorn (Wind River Systems) - * Thomas Corbat (IFS) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.index.composite.cpp; - -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IField; -import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; -import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; -import org.eclipse.cdt.internal.core.index.IIndexType; -import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory; - - -class CompositeCPPUnknownClassType extends CompositeCPPUnknownBinding implements ICPPUnknownClassType, IIndexType { - private ICPPScope unknownScope; - - public CompositeCPPUnknownClassType(ICompositesFactory cf, ICPPUnknownClassType rbinding) { - super(cf, rbinding); - } - - @Override - public IField findField(String name) { - IField preResult = ((ICPPClassType) rbinding).findField(name); - return (IField) cf.getCompositeBinding((IIndexFragmentBinding)preResult); - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getBases() - */ - @Override - public ICPPBase[] getBases() { - return ICPPBase.EMPTY_BASE_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getFields() - */ - @Override - public IField[] getFields() { - return IField.EMPTY_FIELD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredFields() - */ - @Override - public ICPPField[] getDeclaredFields() { - return ICPPField.EMPTY_CPPFIELD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getMethods() - */ - @Override - public ICPPMethod[] getMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getAllDeclaredMethods() - */ - @Override - public ICPPMethod[] getAllDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredMethods() - */ - @Override - public ICPPMethod[] getDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getConstructors() - */ - @Override - public ICPPConstructor[] getConstructors() { - return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getFriends() - */ - @Override - public IBinding[] getFriends() { - return IBinding.EMPTY_BINDING_ARRAY; - } - - @Override - public ICPPClassType[] getNestedClasses() { - ICPPClassType[] result = ((ICPPClassType) rbinding).getNestedClasses(); - for (int i = 0; i < result.length; i++) { - result[i] = (ICPPClassType) cf.getCompositeBinding((IIndexFragmentBinding) result[i]); - } - return result; - } - - @Override - public IScope getCompositeScope() { - return new CompositeCPPClassScope(cf, rbinding); - } - - @Override - public int getKey() { - return ((ICPPClassType) rbinding).getKey(); - } - - @Override - public boolean isSameType(IType type) { - return ((ICPPClassType) rbinding).isSameType(type); - } - - @Override - public ICPPScope asScope() { - if (unknownScope == null) { - unknownScope= new CompositeCPPUnknownScope(this, getUnknownName()); - } - return unknownScope; - } - - @Override - public boolean isAnonymous() { - return false; - } - - @Override - public boolean isFinal() { - return false; - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownField.java new file mode 100644 index 00000000000..4e8af167b2b --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownField.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.index.composite.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexBinding; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownField; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class CompositeCPPUnknownField extends CPPUnknownField implements IIndexBinding { + public CompositeCPPUnknownField(IType owner, char[] name) { + super(owner, name); + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClass.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClass.java new file mode 100644 index 00000000000..275c7517b4c --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClass.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.index.composite.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexBinding; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class CompositeCPPUnknownMemberClass extends CPPUnknownMemberClass implements IIndexBinding { + public CompositeCPPUnknownMemberClass(IType owner, char[] name) { + super(owner, name); + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexBinding getOwner() { + return (IIndexBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } + + @Override + protected CPPUnknownTypeScope createScope() { + return new CompositeCPPUnknownScope(this, new CPPASTName(getNameCharArray())); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClassInstance.java new file mode 100644 index 00000000000..ce35ef5af39 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMemberClassInstance.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.index.composite.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; +import org.eclipse.cdt.core.index.IIndexBinding; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class CompositeCPPUnknownMemberClassInstance extends CPPUnknownClassInstance implements IIndexBinding { + public CompositeCPPUnknownMemberClassInstance(IType owner, char[] name, ICPPTemplateArgument[] arguments) { + super(owner, name, arguments); + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexBinding getOwner() { + return (IIndexBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } + + @Override + protected CPPUnknownTypeScope createScope() { + return new CompositeCPPUnknownScope(this, new CPPASTName(getNameCharArray())); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMethod.java new file mode 100644 index 00000000000..b35884f6327 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownMethod.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.index.composite.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexBinding; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMethod; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class CompositeCPPUnknownMethod extends CPPUnknownMethod implements IIndexBinding { + public CompositeCPPUnknownMethod(IType owner, char[] name) { + super(owner, name); + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownScope.java index 482841690d6..ea6a860f7e1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUnknownScope.java @@ -10,18 +10,18 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.index.composite.cpp; +import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IIndexName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownScope; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; import org.eclipse.cdt.internal.core.index.IIndexScope; -public class CompositeCPPUnknownScope extends CPPUnknownScope implements IIndexScope { - private CompositeCPPBinding fBinding; +public class CompositeCPPUnknownScope extends CPPUnknownTypeScope implements IIndexScope { - public CompositeCPPUnknownScope(CompositeCPPBinding binding, IASTName name) { - super((ICPPUnknownBinding) binding, name); - fBinding= binding; + public CompositeCPPUnknownScope(IIndexBinding binding, IASTName name) { + super((IType) binding, name); } @Override @@ -31,11 +31,15 @@ public class CompositeCPPUnknownScope extends CPPUnknownScope implements IIndexS @Override public IIndexScope getParent() { - return fBinding.getScope(); + try { + return (IIndexScope) super.getParent(); + } catch (DOMException e) { + return null; + } } @Override - public CompositeCPPBinding getScopeBinding() { - return fBinding; + public IIndexBinding getScopeBinding() { + return (IIndexBinding) super.getScopeType(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUsingDeclaration.java index 4bcd5c33fd7..78afb4f99b5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPUsingDeclaration.java @@ -31,8 +31,7 @@ class CompositeCPPUsingDeclaration extends CompositeCPPBinding implements ICPPUs IBinding[] delegates = ((ICPPUsingDeclaration) rbinding).getDelegates(); IBinding[] composites = new IBinding[delegates.length]; int j = 0; - for (int i = 0; i < delegates.length; i++) { - IBinding binding = delegates[i]; + for (IBinding binding : delegates) { if (binding instanceof IIndexFragmentBinding) { composites[j++] = cf.getCompositeBinding((IIndexFragmentBinding) binding); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 77a02465976..b1c9472f4dc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -223,10 +223,11 @@ public class PDOM extends PlatformObject implements IPDOM { * 131.0 - Dependent expressions part 2, bug 299911. * 132.0 - Explicit virtual overrides, bug 380623. * 133.0 - Storing template arguments via direct marshalling, bug 299911. + * 134.0 - Storing unknown bindings via direct marshalling, bug 381824. */ - private static final int MIN_SUPPORTED_VERSION= version(133, 0); - private static final int MAX_SUPPORTED_VERSION= version(133, Short.MAX_VALUE); - private static final int DEFAULT_VERSION = version(133, 0); + private static final int MIN_SUPPORTED_VERSION= version(134, 0); + private static final int MAX_SUPPORTED_VERSION= version(134, Short.MAX_VALUE); + private static final int DEFAULT_VERSION = version(134, 0); private static int version(int major, int minor) { return (major << 16) + minor; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMFileSet.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMFileSet.java index fa9c9d3068a..9eabd64065c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMFileSet.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMFileSet.java @@ -20,7 +20,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMFile; import org.eclipse.core.runtime.CoreException; public class PDOMFileSet implements IIndexFragmentFileSet { - private HashSet fFileIDs= new HashSet(); + private final HashSet fFileIDs= new HashSet(); @Override public void add(IIndexFragmentFile fragFile) { @@ -36,8 +36,11 @@ public class PDOMFileSet implements IIndexFragmentFileSet { @Override public boolean containsFileOfLocalBinding(IIndexFragmentBinding fb) throws CoreException { - PDOMBinding pdomBinding= (PDOMBinding) fb; - return fFileIDs.contains(pdomBinding.getLocalToFileRec()); + if (fb instanceof PDOMBinding) { + PDOMBinding pdomBinding= (PDOMBinding) fb; + return fFileIDs.contains(pdomBinding.getLocalToFileRec()); + } + return false; } @Override diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java index 2fc3456dc6d..ec1c02b650e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java @@ -106,11 +106,7 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer { return null; } - IType type= fLinkage.unmarshalType(this); - if (type == null || type instanceof IBinding) - return (IBinding) type; - - throw unmarshallingError(); + return fLinkage.unmarshalBinding(this); } @Override diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java index cdaa9d00180..769d7a0071f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java @@ -102,7 +102,7 @@ public abstract class PDOMBinding extends PDOMNamedNode implements IPDOMBinding return hasDeclaration != 0; } - public void addDeclaration(PDOMName name) throws CoreException { + public final void addDeclaration(PDOMName name) throws CoreException { PDOMName first = getFirstDeclaration(); if (first != null) { first.setPrevInBinding(name); @@ -111,7 +111,7 @@ public abstract class PDOMBinding extends PDOMNamedNode implements IPDOMBinding setFirstDeclaration(name); } - public void addDefinition(PDOMName name) throws CoreException { + public final void addDefinition(PDOMName name) throws CoreException { PDOMName first = getFirstDefinition(); if (first != null) { first.setPrevInBinding(name); @@ -120,7 +120,7 @@ public abstract class PDOMBinding extends PDOMNamedNode implements IPDOMBinding setFirstDefinition(name); } - public void addReference(PDOMName name) throws CoreException { + public final void addReference(PDOMName name) throws CoreException { PDOMName first = getFirstReference(); if (first != null) { first.setPrevInBinding(name); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java index 9a03c49a423..ef857541949 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IProblemBinding; +import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.IValue; @@ -39,6 +40,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayMap; import org.eclipse.cdt.internal.core.dom.parser.ASTInternal; import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; +import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; import org.eclipse.cdt.internal.core.index.IIndexBindingConstants; import org.eclipse.cdt.internal.core.index.IIndexScope; import org.eclipse.cdt.internal.core.pdom.PDOM; @@ -386,15 +388,6 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage return getLinkageName(); } - /** - * Usually bindings are added on behalf of a name, only. For unknown values or using declarations - * we need to add further bindings. - * @throws CoreException - */ - public PDOMBinding addPotentiallyUnknownBinding(IBinding binding) throws CoreException { - return null; - } - /** * Returns the list of global bindings for the given name. * @throws CoreException @@ -432,6 +425,7 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage public abstract PDOMBinding addTypeBinding(IBinding type) throws CoreException; public abstract IType unmarshalType(ITypeMarshalBuffer buffer) throws CoreException; + public abstract IBinding unmarshalBinding(ITypeMarshalBuffer buffer) throws CoreException; public abstract ISerializableEvaluation unmarshalEvaluation(ITypeMarshalBuffer typeMarshalBuffer) throws CoreException; public void storeType(long offset, IType type) throws CoreException { @@ -497,6 +491,69 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage return new TypeMarshalBuffer(this, data).unmarshalType(); } + public void storeBinding(long offset, IBinding binding) throws CoreException { + final Database db= getDB(); + deleteBinding(db, offset); + storeBinding(db, offset, binding); + } + + private void storeBinding(Database db, long offset, IBinding binding) throws CoreException { + if (binding != null) { + TypeMarshalBuffer bc= new TypeMarshalBuffer(this); + bc.marshalBinding(binding); + int len= bc.getPosition(); + if (len > 0) { + if (len <= Database.TYPE_SIZE) { + db.putBytes(offset, bc.getBuffer(), len); + } else if (len <= Database.MAX_MALLOC_SIZE-2){ + long ptr= db.malloc(len+2); + db.putShort(ptr, (short) len); + db.putBytes(ptr+2, bc.getBuffer(), len); + db.putByte(offset, TypeMarshalBuffer.INDIRECT_TYPE); + db.putRecPtr(offset+2, ptr); + } + } + } + } + + private void deleteBinding(Database db, long offset) throws CoreException { + byte firstByte= db.getByte(offset); + if (firstByte == TypeMarshalBuffer.INDIRECT_TYPE) { + long ptr= db.getRecPtr(offset+2); + clearBinding(db, offset); + db.free(ptr); + } else { + clearBinding(db, offset); + } + } + + private void clearBinding(Database db, long offset) throws CoreException { + db.clearBytes(offset, Database.TYPE_SIZE); + } + + public IBinding loadBinding(long offset) throws CoreException { + final Database db= getDB(); + final byte firstByte= db.getByte(offset); + byte[] data= null; + switch(firstByte) { + case TypeMarshalBuffer.INDIRECT_TYPE: + long ptr= db.getRecPtr(offset+2); + int len= db.getShort(ptr) & 0xffff; + data= new byte[len]; + db.getBytes(ptr+2, data); + break; + case TypeMarshalBuffer.UNSTORABLE_TYPE: + return new ProblemBinding(null, ISemanticProblem.TYPE_NOT_PERSISTED); + case TypeMarshalBuffer.NULL_TYPE: + return null; + default: + data= new byte[Database.TYPE_SIZE]; + db.getBytes(offset, data); + break; + } + return new TypeMarshalBuffer(this, data).unmarshalBinding(); + } + public void storeTemplateArgument(long offset, ICPPTemplateArgument arg) throws CoreException { final Database db= getDB(); deleteArgument(db, offset); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java index 9640f88b0c7..dd7be434ab3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java @@ -325,6 +325,10 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants { return addBinding(type, null); } + @Override + public IBinding unmarshalBinding(ITypeMarshalBuffer buffer) throws CoreException { + throw new CoreException(CCorePlugin.createStatus("Cannot unmarshal a binding, first byte=" + buffer.getByte())); //$NON-NLS-1$ + } @Override public IType unmarshalType(ITypeMarshalBuffer buffer) throws CoreException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBase.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBase.java index 7fea377b174..ca112bfc0c0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBase.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBase.java @@ -11,13 +11,18 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.pdom.dom.cpp; +import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; +import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType; + import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IName; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.ISemanticProblem; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; +import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBase; import org.eclipse.cdt.internal.core.pdom.db.Database; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMName; import org.eclipse.core.runtime.CoreException; @@ -26,32 +31,31 @@ import org.eclipse.core.runtime.CoreException; * @author Doug Schaefer */ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { - private static final int BASECLASS_SPECIFIER = 0; - private static final int NEXTBASE = 4; - private static final int FLAGS = 8; + static final int CLASS_DEFINITION = 0; + private static final int BASECLASS_TYPE = CLASS_DEFINITION + Database.PTR_SIZE; + private static final int NEXTBASE = BASECLASS_TYPE + Database.TYPE_SIZE; + private static final int FLAGS = NEXTBASE + Database.PTR_SIZE; - protected static final int RECORD_SIZE = 9; + protected static final int RECORD_SIZE = FLAGS + 1; private final PDOMLinkage linkage; private final long record; - private PDOMBinding fCachedBaseClass; + private IType fCachedBaseClass; public PDOMCPPBase(PDOMLinkage linkage, long record) { this.linkage = linkage; this.record = record; } - public PDOMCPPBase(PDOMLinkage linkage, PDOMName baseClassSpec, boolean isVirtual, int visibility) - throws CoreException { + public PDOMCPPBase(PDOMLinkage linkage, ICPPBase base, PDOMName classDefName) throws CoreException { + Database db = linkage.getDB(); this.linkage = linkage; - Database db = getDB(); this.record = db.malloc(RECORD_SIZE); + db.putRecPtr(record + CLASS_DEFINITION, classDefName.getRecord()); + linkage.storeType(record+BASECLASS_TYPE, base.getBaseClassType()); - long baserec = baseClassSpec != null ? baseClassSpec.getRecord() : 0; - db.putRecPtr(record + BASECLASS_SPECIFIER, baserec); - - byte flags = (byte)(visibility | (isVirtual ? 4 : 0)); + byte flags = (byte)(base.getVisibility() | (base.isVirtual() ? 4 : 0)); db.putByte(record + FLAGS, flags); } @@ -79,8 +83,13 @@ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { @Override public PDOMName getBaseClassSpecifierName() { + return null; + } + + @Override + public PDOMName getClassDefinitionName() { try { - long rec = getDB().getRecPtr(record + BASECLASS_SPECIFIER); + long rec = getDB().getRecPtr(record + CLASS_DEFINITION); if (rec != 0) { return new PDOMName(linkage, rec); } @@ -91,22 +100,23 @@ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { } @Override - public IBinding getBaseClass() { - if (fCachedBaseClass != null) - return fCachedBaseClass; - - try { - PDOMName name= getBaseClassSpecifierName(); - if (name != null) { - PDOMBinding b = name.getBinding(); - while (b instanceof PDOMCPPTypedef && ((PDOMCPPTypedef) b).getType() instanceof PDOMBinding) { - b = (PDOMBinding) ((PDOMCPPTypedef) b).getType(); - } - return fCachedBaseClass= b; - } - } catch (CoreException e) { - CCorePlugin.log(e); + public IType getBaseClassType() { + if (fCachedBaseClass == null) { + try { + fCachedBaseClass= linkage.loadType(record + BASECLASS_TYPE); + } catch (CoreException e) { + fCachedBaseClass= new ProblemType(ISemanticProblem.TYPE_NOT_PERSISTED); + } } + return fCachedBaseClass; + } + + @Override + public IBinding getBaseClass() { + IType type= getBaseClassType(); + type = getNestedType(type, TDEF); + if (type instanceof IBinding) + return (IBinding) type; return null; } @@ -139,6 +149,10 @@ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { public void setBaseClass(IBinding binding) { throw new UnsupportedOperationException(); } + @Override + public void setBaseClass(IType binding) { + throw new UnsupportedOperationException(); + } @Override public ICPPBase clone() { @@ -146,23 +160,37 @@ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { } private static class PDOMCPPBaseClone implements ICPPBase, ICPPInternalBase { - private ICPPBase base; - private IBinding baseClass = null; + private final ICPPBase base; + private IType baseClass = null; public PDOMCPPBaseClone(ICPPBase base) { this.base = base; } @Override public IBinding getBaseClass() { + IType type= getBaseClassType(); + type = getNestedType(type, TDEF); + if (type instanceof IBinding) + return (IBinding) type; + return null; + } + @Override + public IType getBaseClassType() { if (baseClass == null) { - return base.getBaseClass(); + baseClass= base.getBaseClassType(); } return baseClass; } - @Override + + @Override @Deprecated public IName getBaseClassSpecifierName() { return base.getBaseClassSpecifierName(); } + @Override + public IName getClassDefinitionName() { + return base.getClassDefinitionName(); + } + @Override public int getVisibility() { return base.getVisibility(); @@ -173,6 +201,11 @@ class PDOMCPPBase implements ICPPBase, ICPPInternalBase { } @Override public void setBaseClass(IBinding binding) { + if (binding instanceof IType) + baseClass = (IType) binding; + } + @Override + public void setBaseClass(IType binding) { baseClass = binding; } @Override diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java index 82e2b9f87ce..70207f3a2ff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassSpecialization.java @@ -188,33 +188,47 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements getDB().putRecPtr(record + FIRST_BASE, rec); } - public void addBase(PDOMCPPBase base) throws CoreException { - getPDOM().removeCachedResult(record + PDOMCPPLinkage.CACHE_BASES); + public void addBases(PDOMName classDefName, ICPPBase[] bases) throws CoreException { + getPDOM().removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); + final PDOMLinkage linkage = getLinkage(); PDOMCPPBase firstBase = getFirstBase(); - base.setNextBase(firstBase); - setFirstBase(base); + for (ICPPBase base : bases) { + PDOMCPPBase nextBase= new PDOMCPPBase(linkage, base, classDefName); + nextBase.setNextBase(firstBase); + firstBase= nextBase; + } + setFirstBase(firstBase); } - public void removeBase(PDOMName pdomName) throws CoreException { - getPDOM().removeCachedResult(record + PDOMCPPLinkage.CACHE_BASES); + public void removeBases(PDOMName classDefName) throws CoreException { + getPDOM().removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); PDOMCPPBase base= getFirstBase(); PDOMCPPBase predecessor= null; - long nameRec= pdomName.getRecord(); + long nameRec= classDefName.getRecord(); + boolean deleted= false; while (base != null) { - PDOMName name = base.getBaseClassSpecifierName(); - if (name != null && name.getRecord() == nameRec) { - break; + PDOMCPPBase nextBase = base.getNextBase(); + long classDefRec= getDB().getRecPtr(base.getRecord() + PDOMCPPBase.CLASS_DEFINITION); + if (classDefRec == nameRec) { + deleted= true; + base.delete(); + } else if (deleted) { + deleted= false; + if (predecessor == null) { + setFirstBase(base); + } else { + predecessor.setNextBase(base); + } + predecessor= base; } - predecessor= base; - base= base.getNextBase(); + base= nextBase; } - if (base != null) { - if (predecessor != null) { - predecessor.setNextBase(base.getNextBase()); + if (deleted) { + if (predecessor == null) { + setFirstBase(null); } else { - setFirstBase(base.getNextBase()); + predecessor.setNextBase(null); } - base.delete(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java index c62e295109f..33b513eab94 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -141,35 +141,48 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO long rec = base != null ? base.getRecord() : 0; getDB().putRecPtr(record + FIRSTBASE, rec); } - - public void addBase(PDOMCPPBase base) throws CoreException { + + public void addBases(PDOMName classDefName, ICPPBase[] bases) throws CoreException { getPDOM().removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); + final PDOMLinkage linkage = getLinkage(); PDOMCPPBase firstBase = getFirstBase(); - base.setNextBase(firstBase); - setFirstBase(base); + for (ICPPBase base : bases) { + PDOMCPPBase nextBase= new PDOMCPPBase(linkage, base, classDefName); + nextBase.setNextBase(firstBase); + firstBase= nextBase; + } + setFirstBase(firstBase); } - public void removeBase(PDOMName pdomName) throws CoreException { + public void removeBases(PDOMName classDefName) throws CoreException { getPDOM().removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); - PDOMCPPBase base= getFirstBase(); PDOMCPPBase predecessor= null; - long nameRec= pdomName.getRecord(); + long nameRec= classDefName.getRecord(); + boolean deleted= false; while (base != null) { - PDOMName name = base.getBaseClassSpecifierName(); - if (name != null && name.getRecord() == nameRec) { - break; + PDOMCPPBase nextBase = base.getNextBase(); + long classDefRec= getDB().getRecPtr(base.getRecord() + PDOMCPPBase.CLASS_DEFINITION); + if (classDefRec == nameRec) { + deleted= true; + base.delete(); + } else if (deleted) { + deleted= false; + if (predecessor == null) { + setFirstBase(base); + } else { + predecessor.setNextBase(base); + } + predecessor= base; } - predecessor= base; - base= base.getNextBase(); + base= nextBase; } - if (base != null) { - if (predecessor != null) { - predecessor.setNextBase(base.getNextBase()); + if (deleted) { + if (predecessor == null) { + setFirstBase(null); } else { - setFirstBase(base.getNextBase()); + predecessor.setNextBase(null); } - base.delete(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java index f6bfe15fca8..e0c502aa3de 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPDeferredClassInstance.java @@ -1,253 +1,88 @@ /******************************************************************************* - * Copyright (c) 2007, 2012 QNX Software Systems and others. + * Copyright (c) 2012 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Bryan Wilkinson (QNX) - Initial API and implementation - * Markus Schorn (Wind River Systems) - * Thomas Corbat (IFS) - *******************************************************************************/ + * Markus Schorn - initial API and implementation + *******************************************************************************/ + package org.eclipse.cdt.internal.core.pdom.dom.cpp; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.IPDOMVisitor; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IField; -import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.ITypedef; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; +import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; +import org.eclipse.cdt.core.index.IIndexFile; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; -import org.eclipse.cdt.internal.core.index.IIndexType; -import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList; -import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; import org.eclipse.core.runtime.CoreException; -/** - * Deferred class instances collect information about an instantiation until it can be - * carried out. - */ -class PDOMCPPDeferredClassInstance extends PDOMCPPSpecialization - implements ICPPDeferredClassInstance, IPDOMMemberOwner, IIndexType { - private static final int MEMBERLIST = PDOMCPPSpecialization.RECORD_SIZE + 0; - private static final int ARGUMENTS = PDOMCPPSpecialization.RECORD_SIZE + 4; - /** - * The size in bytes of a PDOMCPPDeferredClassInstance record in the database. - */ - @SuppressWarnings("hiding") - protected static final int RECORD_SIZE = PDOMCPPSpecialization.RECORD_SIZE + 8; +public class PDOMCPPDeferredClassInstance extends CPPDeferredClassInstance implements IIndexFragmentBinding { + private final IIndexFragment fFragment; - private PDOMCPPUnknownScope unknownScope; // No need for volatile, PDOMCPPUnknownScope protects its fields. - - public PDOMCPPDeferredClassInstance(PDOMLinkage linkage, PDOMNode parent, - ICPPDeferredClassInstance classType, PDOMBinding instantiated) throws CoreException { - super(linkage, parent, classType, instantiated); - - final ICPPTemplateArgument[] args= classType.getTemplateArguments(); - final long argListRec= PDOMCPPArgumentList.putArguments(this, args); - getDB().putRecPtr(record + ARGUMENTS, argListRec); - } - - public PDOMCPPDeferredClassInstance(PDOMLinkage linkage, long bindingRecord) { - super(linkage, bindingRecord); - } - - @Override - protected int getRecordSize() { - return RECORD_SIZE; + public PDOMCPPDeferredClassInstance(IIndexFragment frag, ICPPClassTemplate template, ICPPTemplateArgument[] args) { + super(template, args); + fFragment= frag; } @Override - public int getNodeType() { + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragment getFragment() { + return fFragment; + } + + @Override + public boolean hasDefinition() throws CoreException { + return false; + } + + @Override + public boolean hasDeclaration() throws CoreException { + return true; + } + + @Override + public int getBindingConstant() { return IIndexCPPBindingConstants.CPP_DEFERRED_CLASS_INSTANCE; } - - @Override - public boolean isExplicitSpecialization() { - return false; - } @Override - public IScope getCompositeScope() { - return asScope(); - } - - @Override - public boolean isSameType(IType type) { - if (type instanceof ITypedef) { - return type.isSameType(this); - } - if (type instanceof PDOMNode) { - PDOMNode node = (PDOMNode) type; - if (node.getPDOM() == getPDOM()) { - return node.getRecord() == getRecord(); - } - } - - ICPPClassTemplate classTemplate = getClassTemplate(); - - if (type instanceof ICPPDeferredClassInstance) { - final ICPPDeferredClassInstance rhs = (ICPPDeferredClassInstance) type; - if (!classTemplate.isSameType((IType) rhs.getSpecializedBinding())) - return false; - - return CPPTemplates.haveSameArguments(this, rhs); - } - return false; - } - - @Override - public ICPPClassTemplate getClassTemplate() { - return (ICPPClassTemplate) getSpecializedBinding(); - } - - @Override - public void addChild(PDOMNode member) throws CoreException { - PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST); - list.addMember(member); + public long getBindingID() { + return 0; } @Override - public void accept(IPDOMVisitor visitor) throws CoreException { - super.accept(visitor); - PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST); - list.accept(visitor); - } - - @Override - public ICPPBase[] getBases() { - return ICPPBase.EMPTY_BASE_ARRAY; - } - - @Override - public IField[] getFields() { - return IField.EMPTY_FIELD_ARRAY; - } - - @Override - public IField findField(String name) { - return null; - } - - @Override - public ICPPField[] getDeclaredFields() { - return ICPPField.EMPTY_CPPFIELD_ARRAY; - } - - @Override - public ICPPMethod[] getMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - @Override - public ICPPMethod[] getAllDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - @Override - public ICPPMethod[] getDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - @Override - public ICPPConstructor[] getConstructors() { - return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY; - } - - @Override - public IBinding[] getFriends() { - return IBinding.EMPTY_BINDING_ARRAY; - } - - @Override - public ICPPClassType[] getNestedClasses() { - return ICPPClassType.EMPTY_CLASS_ARRAY; - } - - @Override - public int getKey(){ - return getClassTemplate().getKey(); - } - - @Override - public Object clone() { - throw new UnsupportedOperationException(); - } - - @Override - public ICPPScope asScope() { - if (unknownScope == null) { - unknownScope= new PDOMCPPUnknownScope(this, getUnknownName()); - } - return unknownScope; - } - - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } - - @Override - public ICPPTemplateDefinition getTemplateDefinition() { - return (ICPPTemplateDefinition) getSpecializedBinding(); + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); } @Override - public boolean isFinal() { - return getClassTemplate().isFinal(); - } - - @Override - public ICPPTemplateArgument[] getTemplateArguments() { + public IIndexScope getScope() { try { - final long rec= getPDOM().getDB().getRecPtr(record + ARGUMENTS); - return PDOMCPPArgumentList.getArguments(this, rec); - } catch (CoreException e) { - CCorePlugin.log(e); - return ICPPTemplateArgument.EMPTY_ARGUMENTS; + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; } } - - @Override - public boolean isAnonymous() { - return false; - } @Override - public CPPTemplateParameterMap getTemplateParameterMap() { - ICPPTemplateParameter[] params = getClassTemplate().getTemplateParameters(); - ICPPTemplateArgument[] args = getTemplateArguments(); - int size = Math.min(args.length, params.length); - CPPTemplateParameterMap map = new CPPTemplateParameterMap(size); - for (int i = 0; i < size; i++) { - map.put(params[i], args[i]); - } - return map; - } - - @Override - @Deprecated - public IType[] getArguments() { - return CPPTemplates.getArguments(getTemplateArguments()); + protected CPPUnknownTypeScope createScope() { + return new PDOMCPPUnknownScope(this, new CPPASTName(getNameCharArray())); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index 1e15385117e..0160143f331 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; @@ -40,7 +41,9 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecializationSpecialization; @@ -76,17 +79,18 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPArrayType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClosureType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunctionType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPParameterPackType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPQualifierType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPReferenceType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMember; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinary; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinaryTypeId; @@ -261,11 +265,6 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { return pdomBinding; } - @Override - public PDOMBinding addPotentiallyUnknownBinding(IBinding binding) throws CoreException { - return addBinding(binding, null); - } - /** * Adds or returns existing binding for the given one. If fromName is not null * then an existing binding is updated with the properties of the name. @@ -352,6 +351,8 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { // template parameters are created directly by their owners. if (binding instanceof ICPPTemplateParameter) return null; + if (binding instanceof ICPPUnknownBinding) + return null; if (binding instanceof ICPPSpecialization) { IBinding specialized = ((ICPPSpecialization) binding).getSpecializedBinding(); @@ -367,15 +368,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } else if (binding instanceof ICPPClassTemplate) { pdomBinding= new PDOMCPPClassTemplate(this, parent, (ICPPClassTemplate) binding); } else if (binding instanceof ICPPClassType) { - if (binding instanceof ICPPUnknownClassInstance) { - pdomBinding= new PDOMCPPUnknownClassInstance(this, parent, (ICPPUnknownClassInstance) binding); - } else if (binding instanceof ICPPUnknownClassType) { - pdomBinding= new PDOMCPPUnknownClassType(this, parent, (ICPPUnknownClassType) binding); - } else { - pdomBinding= new PDOMCPPClassType(this, parent, (ICPPClassType) binding); - } - } else if (binding instanceof ICPPUnknownBinding) { - pdomBinding= new PDOMCPPUnknownBinding(this, parent, (ICPPUnknownBinding) binding); + pdomBinding= new PDOMCPPClassType(this, parent, (ICPPClassType) binding); } else if (binding instanceof ICPPVariable) { ICPPVariable var= (ICPPVariable) binding; pdomBinding = new PDOMCPPVariable(this, parent, var); @@ -443,11 +436,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { private PDOMBinding createSpecialization(PDOMNode parent, PDOMBinding orig, IBinding special) throws CoreException, DOMException { PDOMBinding result= null; - if (special instanceof ICPPDeferredClassInstance) { - if (orig instanceof ICPPClassTemplate) { - result= new PDOMCPPDeferredClassInstance(this, parent, (ICPPDeferredClassInstance) special, orig); - } - } else if (special instanceof ICPPTemplateInstance) { + if (special instanceof ICPPTemplateInstance) { if (special instanceof ICPPConstructor && orig instanceof ICPPConstructor) { result= new PDOMCPPConstructorInstance(this, parent, (ICPPConstructor) special, orig); } else if (special instanceof ICPPMethod && orig instanceof ICPPMethod) { @@ -527,7 +516,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { if (binding instanceof ICPPSpecialization) { if (binding instanceof ICPPTemplateInstance) { if (binding instanceof ICPPDeferredClassInstance) { - return CPP_DEFERRED_CLASS_INSTANCE; + return 0; } else if (binding instanceof ICPPConstructor) { return CPP_CONSTRUCTOR_INSTANCE; } else if (binding instanceof ICPPMethod) { @@ -594,11 +583,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } else if (binding instanceof ICPPFunction) { return CPPFUNCTION; } else if (binding instanceof ICPPUnknownBinding) { - if (binding instanceof ICPPUnknownClassInstance) { - return CPP_UNKNOWN_CLASS_INSTANCE; - } else if (binding instanceof ICPPUnknownClassType) { - return CPP_UNKNOWN_CLASS_TYPE; - } + return 0; } else if (binding instanceof ICPPClassTemplate) { // this must be before class type return CPP_CLASS_TEMPLATE; @@ -812,14 +797,6 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { return new PDOMCPPConstructorInstance(this, record); case CPP_CLASS_INSTANCE: return new PDOMCPPClassInstance(this, record); - case CPP_DEFERRED_CLASS_INSTANCE: - return new PDOMCPPDeferredClassInstance(this, record); - case CPP_UNKNOWN_BINDING: - return new PDOMCPPUnknownBinding(this, record); - case CPP_UNKNOWN_CLASS_TYPE: - return new PDOMCPPUnknownClassType(this, record); - case CPP_UNKNOWN_CLASS_INSTANCE: - return new PDOMCPPUnknownClassInstance(this, record); case CPP_TEMPLATE_TYPE_PARAMETER: return new PDOMCPPTemplateTypeParameter(this, record); case CPP_TEMPLATE_TEMPLATE_PARAMETER: @@ -869,24 +846,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { parentNode = parentNode.getParent(); } if (parentNode instanceof ICPPASTBaseSpecifier) { - PDOMName derivedClassName= (PDOMName) pdomName.getEnclosingDefinition(); - if (derivedClassName != null) { - ICPPASTBaseSpecifier baseNode= (ICPPASTBaseSpecifier) parentNode; - PDOMBinding derivedClassBinding= derivedClassName.getBinding(); - if (derivedClassBinding instanceof PDOMCPPClassType) { - PDOMCPPClassType ownerClass = (PDOMCPPClassType) derivedClassBinding; - PDOMCPPBase pdomBase = new PDOMCPPBase(this, pdomName, baseNode.isVirtual(), - baseNode.getVisibility()); - ownerClass.addBase(pdomBase); - pdomName.setIsBaseSpecifier(); - } else if (derivedClassBinding instanceof PDOMCPPClassSpecialization) { - PDOMCPPClassSpecialization ownerClass = (PDOMCPPClassSpecialization) derivedClassBinding; - PDOMCPPBase pdomBase = new PDOMCPPBase(this, pdomName, baseNode.isVirtual(), - baseNode.getVisibility()); - ownerClass.addBase(pdomBase); - pdomName.setIsBaseSpecifier(); - } - } + pdomName.setIsBaseSpecifier(); } else if (parentNode instanceof ICPPASTUsingDirective) { IASTNode parent= name.getParent(); if (parent instanceof ICPPASTQualifiedName) { @@ -899,8 +859,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { IASTNode node= ASTInternal.getPhysicalNodeOfScope(container); if (node instanceof IASTTranslationUnit) { doit= true; - } - else if (node instanceof ICPPASTNamespaceDefinition) { + } else if (node instanceof ICPPASTNamespaceDefinition) { ICPPASTNamespaceDefinition nsDef= (ICPPASTNamespaceDefinition) node; IASTName nsContainerName= nsDef.getName(); if (nsContainerName != null) { @@ -950,6 +909,24 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { if (nsdef.isInline()) { pdomName.setIsInlineNamespace(); } + } else if (parentNode instanceof ICPPASTCompositeTypeSpecifier) { + IBinding classBinding = name.resolveBinding(); + if (classBinding instanceof ICPPClassType) { + ICPPBase[] bases; + if (classBinding instanceof ICPPClassSpecialization) { + bases= ((ICPPClassSpecialization) classBinding).getBases(name); + } else { + bases= ((ICPPClassType) classBinding).getBases(); + } + if (bases.length > 0) { + PDOMBinding pdomBinding = pdomName.getBinding(); + if (pdomBinding instanceof PDOMCPPClassType) { + ((PDOMCPPClassType) pdomBinding).addBases(pdomName, bases); + } else if (pdomBinding instanceof PDOMCPPClassSpecialization) { + ((PDOMCPPClassSpecialization) pdomBinding).addBases(pdomName, bases); + } + } + } } } @@ -972,20 +949,6 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { @Override public void onDeleteName(PDOMName pdomName) throws CoreException { super.onDeleteName(pdomName); - - if (pdomName.isBaseSpecifier()) { - PDOMName derivedClassName= (PDOMName) pdomName.getEnclosingDefinition(); - if (derivedClassName != null) { - PDOMBinding derivedClassBinding= derivedClassName.getBinding(); - if (derivedClassBinding instanceof PDOMCPPClassType) { - PDOMCPPClassType ownerClass = (PDOMCPPClassType)derivedClassBinding; - ownerClass.removeBase(pdomName); - } else if (derivedClassBinding instanceof PDOMCPPClassSpecialization) { - PDOMCPPClassSpecialization ownerClass = (PDOMCPPClassSpecialization)derivedClassBinding; - ownerClass.removeBase(pdomName); - } - } - } if (pdomName.isFriendSpecifier()) { PDOMName enclClassName = (PDOMName) pdomName.getEnclosingDefinition(); if (enclClassName != null) { @@ -995,6 +958,13 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { ownerClass.removeFriend(pdomName); } } + } else if (pdomName.isDefinition()) { + PDOMBinding binding = pdomName.getBinding(); + if (binding instanceof PDOMCPPClassType) { + ((PDOMCPPClassType) binding).removeBases(pdomName); + } else if (binding instanceof PDOMCPPClassSpecialization) { + ((PDOMCPPClassSpecialization) binding).removeBases(pdomName); + } } } @@ -1065,6 +1035,30 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { return CPPPointerToMemberType.unmarshal(firstByte, buffer); case ITypeMarshalBuffer.DEPENDENT_EXPRESSION_TYPE: return TypeOfDependentExpression.unmarshal(firstByte, buffer); + case ITypeMarshalBuffer.UNKNOWN_MEMBER: + IBinding binding= CPPUnknownMember.unmarshal(getPDOM(), firstByte, buffer); + if (binding instanceof IType) + return (IType) binding; + break; + case ITypeMarshalBuffer.UNKNOWN_MEMBER_CLASS_INSTANCE: + return CPPUnknownClassInstance.unmarshal(getPDOM(), firstByte, buffer); + case ITypeMarshalBuffer.DEFERRED_CLASS_INSTANCE: + return CPPDeferredClassInstance.unmarshal(getPDOM(), firstByte, buffer); + } + + throw new CoreException(CCorePlugin.createStatus("Cannot unmarshal a type, first byte=" + firstByte)); //$NON-NLS-1$ + } + + @Override + public IBinding unmarshalBinding(ITypeMarshalBuffer buffer) throws CoreException { + int firstByte= buffer.getByte(); + switch ((firstByte & ITypeMarshalBuffer.KIND_MASK)) { + case ITypeMarshalBuffer.UNKNOWN_MEMBER: + return CPPUnknownMember.unmarshal(getPDOM(), firstByte, buffer); + case ITypeMarshalBuffer.UNKNOWN_MEMBER_CLASS_INSTANCE: + return CPPUnknownClassInstance.unmarshal(getPDOM(), firstByte, buffer); + case ITypeMarshalBuffer.DEFERRED_CLASS_INSTANCE: + return CPPDeferredClassInstance.unmarshal(getPDOM(), firstByte, buffer); } throw new CoreException(CCorePlugin.createStatus("Cannot unmarshal a type, first byte=" + firstByte)); //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java index 5d011795f8a..8f4ab194471 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTemplateParameter.java @@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; @@ -186,11 +185,6 @@ public class PDOMCPPTemplateTemplateParameter extends PDOMCPPBinding return fUnknownScope; } - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } - @Override public void configure(ICPPTemplateParameter param) { try { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTypeParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTypeParameter.java index 2ebf0ac7c52..2dd5571cb97 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTypeParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTemplateTypeParameter.java @@ -15,7 +15,6 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; @@ -171,11 +170,6 @@ class PDOMCPPTemplateTypeParameter extends PDOMCPPBinding implements IPDOMMember return fUnknownScope; } - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } - @Override public void configure(ICPPTemplateParameter param) { try { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownBinding.java deleted file mode 100644 index c3fd0884c7a..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownBinding.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Wind River Systems, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Markus Schorn (Wind River Systems) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.core.pdom.dom.cpp; - -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; -import org.eclipse.core.runtime.CoreException; - -/** - * Models unknown bindings. The class is directly used for objects (variables, functions, ...) and - * serves as a base for unknown types. - */ -class PDOMCPPUnknownBinding extends PDOMCPPBinding implements ICPPUnknownBinding { - @SuppressWarnings("hiding") - protected static final int RECORD_SIZE = PDOMCPPBinding.RECORD_SIZE; - - public PDOMCPPUnknownBinding(PDOMLinkage linkage, PDOMNode parent, ICPPUnknownBinding binding) throws CoreException { - super(linkage, parent, binding.getNameCharArray()); - } - - public PDOMCPPUnknownBinding(PDOMLinkage linkage, long bindingRecord) { - super(linkage, bindingRecord); - } - - @Override - protected int getRecordSize() { - return RECORD_SIZE; - } - - @Override - public int getNodeType() { - return IIndexCPPBindingConstants.CPP_UNKNOWN_BINDING; - } - - @Override - public ICPPScope asScope() { - return null; - } - - @Override - public boolean mayHaveChildren() { - return false; - } - - @Override - public IASTName getUnknownName() { - return new CPPASTName(getNameCharArray()); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java deleted file mode 100644 index ffa71595578..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassInstance.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2011 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Sergey Prigogin (Google) - initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.pdom.dom.cpp; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.ITypedef; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; -import org.eclipse.cdt.core.parser.util.CharArrayUtils; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; -import org.eclipse.cdt.internal.core.index.IndexCPPSignatureUtil; -import org.eclipse.cdt.internal.core.pdom.db.Database; -import org.eclipse.cdt.internal.core.pdom.dom.IPDOMOverloader; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; -import org.eclipse.core.runtime.CoreException; - -/** - * @author Sergey Prigogin - */ -class PDOMCPPUnknownClassInstance extends PDOMCPPUnknownClassType implements ICPPUnknownClassInstance, IPDOMOverloader { - private static final int ARGUMENTS = PDOMCPPUnknownClassType.RECORD_SIZE + 0; - private static final int SIGNATURE_HASH = ARGUMENTS + 4; - - @SuppressWarnings("hiding") - protected static final int RECORD_SIZE = SIGNATURE_HASH + 4; - - // Cached values. - private volatile ICPPTemplateArgument[] arguments; - - public PDOMCPPUnknownClassInstance(PDOMLinkage linkage, PDOMNode parent, ICPPUnknownClassInstance classInstance) - throws CoreException { - super(linkage, parent, classInstance); - - final ICPPTemplateArgument[] args= classInstance.getArguments(); - long rec= PDOMCPPArgumentList.putArguments(this, args); - final Database db = getDB(); - db.putRecPtr(record + ARGUMENTS, rec); - try { - Integer sigHash = IndexCPPSignatureUtil.getSignatureHash(classInstance); - db.putInt(record + SIGNATURE_HASH, sigHash != null ? sigHash.intValue() : 0); - } catch (DOMException e) { - } - } - - public PDOMCPPUnknownClassInstance(PDOMLinkage linkage, long bindingRecord) { - super(linkage, bindingRecord); - } - - @Override - protected int getRecordSize() { - return RECORD_SIZE; - } - - @Override - public int getNodeType() { - return IIndexCPPBindingConstants.CPP_UNKNOWN_CLASS_INSTANCE; - } - - @Override - public int getSignatureHash() throws CoreException { - return getDB().getInt(record + SIGNATURE_HASH); - } - - @Override - public ICPPTemplateArgument[] getArguments() { - if (arguments == null) { - try { - final long rec= getPDOM().getDB().getRecPtr(record + ARGUMENTS); - arguments= PDOMCPPArgumentList.getArguments(this, rec); - } catch (CoreException e) { - CCorePlugin.log(e); - arguments= ICPPTemplateArgument.EMPTY_ARGUMENTS; - } - } - return arguments; - } - - @Override - public boolean isSameType(IType type) { - if (type instanceof ITypedef) { - return type.isSameType(this); - } - - if (type instanceof PDOMNode) { - PDOMNode node= (PDOMNode) type; - // Different PDOM bindings may result in equal types if a parent - // turns out to be a template parameter. - if (node.getPDOM() == getPDOM() && node.getRecord() == getRecord()) { - return true; - } - } - - if (type instanceof ICPPUnknownClassInstance) { - ICPPUnknownClassInstance rhs= (ICPPUnknownClassInstance) type; - if (CharArrayUtils.equals(getNameCharArray(), rhs.getNameCharArray())) { - ICPPTemplateArgument[] lhsArgs= getArguments(); - ICPPTemplateArgument[] rhsArgs= rhs.getArguments(); - if (lhsArgs != rhsArgs) { - if (lhsArgs == null || rhsArgs == null) - return false; - - if (lhsArgs.length != rhsArgs.length) - return false; - - for (int i= 0; i < lhsArgs.length; i++) { - if (!lhsArgs[i].isSameValue(rhsArgs[i])) - return false; - } - } - final IBinding lhsContainer= getOwner(); - final IBinding rhsContainer= rhs.getOwner(); - if (lhsContainer instanceof IType && rhsContainer instanceof IType) { - return (((IType) lhsContainer).isSameType((IType) rhsContainer)); - } - } - } - return false; - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassType.java deleted file mode 100644 index 5fc6fbb3b07..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownClassType.java +++ /dev/null @@ -1,294 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Sergey Prigogin (Google) - initial API and implementation - * Markus Schorn (Wind River Systems) - * Thomas Corbat (IFS) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.pdom.dom.cpp; - -import org.eclipse.cdt.core.dom.IPDOMVisitor; -import org.eclipse.cdt.core.dom.ast.EScopeKind; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IField; -import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.ITypedef; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; -import org.eclipse.cdt.core.index.IIndexBinding; -import org.eclipse.cdt.core.index.IIndexFileSet; -import org.eclipse.cdt.core.parser.util.CharArrayUtils; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassInstance; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownClassType; -import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics; -import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; -import org.eclipse.cdt.internal.core.index.IIndexScope; -import org.eclipse.cdt.internal.core.index.IIndexType; -import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList; -import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; -import org.eclipse.core.runtime.CoreException; - -/** - * @author Sergey Prigogin - */ -class PDOMCPPUnknownClassType extends PDOMCPPUnknownBinding - implements ICPPClassScope, ICPPUnknownClassType, IPDOMMemberOwner, IIndexType, IIndexScope { - private static final int KEY = PDOMCPPBinding.RECORD_SIZE + 0; // byte - private static final int MEMBERLIST = PDOMCPPBinding.RECORD_SIZE + 4; - @SuppressWarnings("hiding") - protected static final int RECORD_SIZE = PDOMCPPUnknownBinding.RECORD_SIZE + 8; - - private PDOMCPPUnknownScope unknownScope; // No need for volatile, PDOMCPPUnknownScope protects its fields - - public PDOMCPPUnknownClassType(PDOMLinkage linkage, PDOMNode parent, ICPPUnknownClassType classType) throws CoreException { - super(linkage, parent, classType); - - setKind(classType); - // Linked list is initialized by storage being zero'd by malloc - } - - public PDOMCPPUnknownClassType(PDOMLinkage linkage, long bindingRecord) { - super(linkage, bindingRecord); - } - - @Override - public EScopeKind getKind() { - return EScopeKind.eClassType; - } - - @Override - public void update(PDOMLinkage linkage, IBinding newBinding) throws CoreException { - if (newBinding instanceof ICPPClassType) { - ICPPClassType ct= (ICPPClassType) newBinding; - setKind(ct); - super.update(linkage, newBinding); - } - } - - private void setKind(ICPPClassType ct) throws CoreException { - getDB().putByte(record + KEY, (byte) ct.getKey()); - } - - @Override - public void addChild(PDOMNode member) throws CoreException { - PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST); - list.addMember(member); - } - - @Override - protected int getRecordSize() { - return RECORD_SIZE; - } - - @Override - public int getNodeType() { - return IIndexCPPBindingConstants.CPP_UNKNOWN_CLASS_TYPE; - } - - @Override - public void accept(IPDOMVisitor visitor) throws CoreException { - super.accept(visitor); - PDOMNodeLinkedList list = new PDOMNodeLinkedList(getLinkage(), record + MEMBERLIST); - list.accept(visitor); - } - - @Override - public ICPPMethod[] getImplicitMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - @Override - public IScope getCompositeScope() { - return this; - } - - @Override - public ICPPScope asScope() { - if (unknownScope == null) { - unknownScope= new PDOMCPPUnknownScope(this, getUnknownName()); - } - return unknownScope; - } - - @Override - public IIndexBinding getScopeBinding() { - return this; - } - - @Override - public ICPPClassType getClassType() { - return this; - } - - @Override - public IBinding getBinding(IASTName name, boolean resolve, IIndexFileSet fileSet) { - return null; - } - - @Deprecated @Override - public IBinding[] getBindings(IASTName name, boolean resolve, boolean prefixLookup, IIndexFileSet fileSet) { - return IBinding.EMPTY_BINDING_ARRAY; - } - - @Override - public IBinding[] getBindings(ScopeLookupData lookup) { - return IBinding.EMPTY_BINDING_ARRAY; - } - - @Override - public IBinding[] find(String name) { - return CPPSemantics.findBindings(this, name, false); - } - - // Not implemented - - @Override - public Object clone() { - throw new UnsupportedOperationException(); - } - - @Override - public IField findField(String name) { - return null; - } - - @Override - public boolean mayHaveChildren() { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getBases() - */ - @Override - public ICPPBase[] getBases() { - return ICPPBase.EMPTY_BASE_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getFields() - */ - @Override - public IField[] getFields() { - return IField.EMPTY_FIELD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredFields() - */ - @Override - public ICPPField[] getDeclaredFields() { - return ICPPField.EMPTY_CPPFIELD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getMethods() - */ - @Override - public ICPPMethod[] getMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getAllDeclaredMethods() - */ - @Override - public ICPPMethod[] getAllDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getDeclaredMethods() - */ - @Override - public ICPPMethod[] getDeclaredMethods() { - return ICPPMethod.EMPTY_CPPMETHOD_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getConstructors() - */ - @Override - public ICPPConstructor[] getConstructors() { - return ICPPConstructor.EMPTY_CONSTRUCTOR_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getFriends() - */ - @Override - public IBinding[] getFriends() { - return IBinding.EMPTY_BINDING_ARRAY; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.ICompositeType#getKey() - */ - @Override - public int getKey() { - return 0; - } - - /* (non-Javadoc) - * @see IType#isSameType(IType) - */ - @Override - public boolean isSameType(IType type) { - if (type instanceof ITypedef) { - return type.isSameType(this); - } - - if (type instanceof PDOMNode) { - PDOMNode node= (PDOMNode) type; - // Different PDOM bindings may result in equal types if a parent - // turns out to be a template parameter. - if (node.getPDOM() == getPDOM() && node.getRecord() == getRecord()) { - return true; - } - } - - if (type instanceof ICPPUnknownClassType - && !(type instanceof ICPPUnknownClassInstance) - && !(type instanceof ICPPDeferredClassInstance)) { - ICPPUnknownClassType rhs= (ICPPUnknownClassType) type; - if (CharArrayUtils.equals(getNameCharArray(), rhs.getNameCharArray())) { - final IBinding lhsContainer = getOwner(); - final IBinding rhsContainer = rhs.getOwner(); - if (lhsContainer instanceof IType && rhsContainer instanceof IType) { - return ((IType)lhsContainer).isSameType((IType) rhsContainer); - } - } - } - return false; - } - - @Override - public ICPPClassType[] getNestedClasses() { - return ICPPClassType.EMPTY_CLASS_ARRAY; - } - - @Override - public boolean isAnonymous() { - return false; - } - - @Override - public boolean isFinal() { - return false; - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownField.java new file mode 100644 index 00000000000..6c557933dee --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownField.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.dom.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownField; +import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class PDOMCPPUnknownField extends CPPUnknownField implements IIndexFragmentBinding { + private final IIndexFragment fFragment; + + public PDOMCPPUnknownField(IIndexFragment frag, IType owner, char[] name) { + super(owner, name); + fFragment= frag; + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragment getFragment() { + return fFragment; + } + + @Override + public boolean hasDefinition() throws CoreException { + return false; + } + + @Override + public boolean hasDeclaration() throws CoreException { + return true; + } + + @Override + public int getBindingConstant() { + return IIndexCPPBindingConstants.CPP_UNKNOWN_FIELD; + } + + @Override + public long getBindingID() { + return 0; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClass.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClass.java new file mode 100644 index 00000000000..e1527ac55dd --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClass.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.dom.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class PDOMCPPUnknownMemberClass extends CPPUnknownMemberClass implements IIndexFragmentBinding { + private final IIndexFragment fFragment; + + public PDOMCPPUnknownMemberClass(IIndexFragment frag, IType owner, char[] name) { + super(owner, name); + fFragment= frag; + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragment getFragment() { + return fFragment; + } + + @Override + public boolean hasDefinition() throws CoreException { + return false; + } + + @Override + public boolean hasDeclaration() throws CoreException { + return true; + } + + @Override + public int getBindingConstant() { + return IIndexCPPBindingConstants.CPP_UNKNOWN_CLASS_TYPE; + } + + @Override + public long getBindingID() { + return 0; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } + + @Override + protected CPPUnknownTypeScope createScope() { + return new PDOMCPPUnknownScope(this, new CPPASTName(getNameCharArray())); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClassInstance.java new file mode 100644 index 00000000000..8af3674f232 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMemberClassInstance.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.dom.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownClassInstance; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class PDOMCPPUnknownMemberClassInstance extends CPPUnknownClassInstance implements IIndexFragmentBinding { + private final IIndexFragment fFragment; + + public PDOMCPPUnknownMemberClassInstance(IIndexFragment frag, IType owner, char[] name, ICPPTemplateArgument[] arguments) { + super(owner, name, arguments); + fFragment= frag; + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragment getFragment() { + return fFragment; + } + + @Override + public boolean hasDefinition() throws CoreException { + return false; + } + + @Override + public boolean hasDeclaration() throws CoreException { + return true; + } + + @Override + public int getBindingConstant() { + return IIndexCPPBindingConstants.CPP_UNKNOWN_CLASS_INSTANCE; + } + + @Override + public long getBindingID() { + return 0; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } + + @Override + protected CPPUnknownTypeScope createScope() { + return new PDOMCPPUnknownScope(this, new CPPASTName(getNameCharArray())); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMethod.java new file mode 100644 index 00000000000..9744ff7a9a0 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownMethod.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Schorn - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.dom.cpp; + +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.index.IIndexFile; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMethod; +import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; +import org.eclipse.cdt.internal.core.index.IIndexFragment; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; +import org.eclipse.cdt.internal.core.index.IIndexScope; +import org.eclipse.core.runtime.CoreException; + +public class PDOMCPPUnknownMethod extends CPPUnknownMethod implements IIndexFragmentBinding { + private final IIndexFragment fFragment; + + public PDOMCPPUnknownMethod(IIndexFragment frag, IType owner, char[] name) { + super(owner, name); + fFragment= frag; + } + + @Override + public boolean isFileLocal() throws CoreException { + return false; + } + + @Override + public IIndexFile getLocalToFile() throws CoreException { + return null; + } + + @Override + public IIndexFragment getFragment() { + return fFragment; + } + + @Override + public boolean hasDefinition() throws CoreException { + return false; + } + + @Override + public boolean hasDeclaration() throws CoreException { + return true; + } + + @Override + public int getBindingConstant() { + return IIndexCPPBindingConstants.CPP_UNKNOWN_METHOD; + } + + @Override + public long getBindingID() { + return 0; + } + + @Override + public IIndexFragmentBinding getOwner() { + return (IIndexFragmentBinding) super.getOwner(); + } + + @Override + public IIndexScope getScope() { + try { + return (IIndexScope) super.getScope(); + } catch (DOMException e) { + return null; + } + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownScope.java index 77ed17ec565..48fd252ae74 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUnknownScope.java @@ -13,15 +13,16 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.index.IIndexName; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownScope; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownTypeScope; +import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; import org.eclipse.cdt.internal.core.index.IIndexScope; -public class PDOMCPPUnknownScope extends CPPUnknownScope implements IIndexScope { +public class PDOMCPPUnknownScope extends CPPUnknownTypeScope implements IIndexScope { - public PDOMCPPUnknownScope(PDOMCPPBinding binding, IASTName name) { - super((ICPPUnknownBinding) binding, name); + public PDOMCPPUnknownScope(IIndexFragmentBinding binding, IASTName name) { + super((IType) binding, name); } @Override @@ -35,8 +36,8 @@ public class PDOMCPPUnknownScope extends CPPUnknownScope implements IIndexScope } @Override - public PDOMCPPBinding getScopeBinding() { - return (PDOMCPPBinding) super.getScopeBinding(); + public IIndexFragmentBinding getScopeBinding() { + return (IIndexFragmentBinding) super.getScopeType(); } @Override diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclaration.java index dc777af3e20..16d09920afe 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPUsingDeclaration.java @@ -11,16 +11,12 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.pdom.dom.cpp; -import java.util.LinkedHashSet; -import java.util.Set; - import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; import org.eclipse.cdt.internal.core.pdom.db.Database; -import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.core.runtime.CoreException; @@ -33,14 +29,14 @@ import org.eclipse.core.runtime.CoreException; * @see ICPPUsingDeclaration */ class PDOMCPPUsingDeclaration extends PDOMCPPBinding implements ICPPUsingDeclaration { - private static final int TARGET_BINDING = PDOMCPPBinding.RECORD_SIZE + 0; + private static final int TARGET_BINDING = PDOMCPPBinding.RECORD_SIZE; // Using declarations for functions may have multiple delegates. We model such case // by creating a chain of PDOMCPPUsingDeclaration objects linked by NEXT_DELEGATE field. - private static final int NEXT_DELEGATE = PDOMCPPBinding.RECORD_SIZE + 4; + private static final int NEXT_DELEGATE = TARGET_BINDING + Database.TYPE_SIZE; @SuppressWarnings("hiding") - protected static final int RECORD_SIZE = PDOMCPPBinding.RECORD_SIZE + 8; + protected static final int RECORD_SIZE = NEXT_DELEGATE + Database.PTR_SIZE; private volatile IBinding[] delegates; @@ -50,17 +46,15 @@ class PDOMCPPUsingDeclaration extends PDOMCPPBinding implements ICPPUsingDeclara final Database db = getDB(); final char[] name = using.getNameCharArray(); - Set targets= new LinkedHashSet(); PDOMCPPUsingDeclaration last= null; for (IBinding delegate : using.getDelegates()) { - PDOMBinding target = getLinkage().addPotentiallyUnknownBinding(delegate); - if (target != null && targets.add(target)) { + if (delegate != null) { if (last == null) { - setTargetBinding(linkage, target); + setTargetBinding(linkage, delegate); last= this; } else { PDOMCPPUsingDeclaration next= new PDOMCPPUsingDeclaration(linkage, parent, name); - next.setTargetBinding(linkage, target); + next.setTargetBinding(linkage, delegate); db.putRecPtr(last.getRecord() + NEXT_DELEGATE, next.record); last= next; } @@ -76,8 +70,8 @@ class PDOMCPPUsingDeclaration extends PDOMCPPBinding implements ICPPUsingDeclara super(linkage, parent, name); } - private void setTargetBinding(PDOMLinkage linkage, PDOMBinding delegate) throws CoreException { - getDB().putRecPtr(record + TARGET_BINDING, delegate != null ? delegate.getRecord() : 0); + private void setTargetBinding(PDOMLinkage linkage, IBinding delegate) throws CoreException { + getLinkage().storeBinding(record + TARGET_BINDING, delegate); } @Override @@ -118,8 +112,7 @@ class PDOMCPPUsingDeclaration extends PDOMCPPBinding implements ICPPUsingDeclara private IBinding getBinding() { try { - return (IBinding) getLinkage().getNode( - getPDOM().getDB().getRecPtr(record + TARGET_BINDING)); + return getLinkage().loadBinding(record + TARGET_BINDING); } catch (CoreException e) { CCorePlugin.log(e); } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyAcrossProjectsTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyAcrossProjectsTest.java index 24979d81737..a2fca90c9fc 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyAcrossProjectsTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyAcrossProjectsTest.java @@ -89,6 +89,7 @@ public class TypeHierarchyAcrossProjectsTest extends TypeHierarchyBaseTest { String header= content[0].toString(); String source = content[1].toString(); IFile headerFile= createFile(fCProject.getProject(), "simpleHeader.h", header); + waitUntilFileIsIndexed(fIndex, headerFile); IFile sourceFile= createFile(fCProject2.getProject(), "simple.cpp", source); waitUntilFileIsIndexed(fIndex, sourceFile); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java index 93ad1f49f44..5ab9c6dc2c2 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java @@ -164,15 +164,17 @@ class THGraph { if (monitor.isCanceled()) { return; } - IName name= base.getBaseClassSpecifierName(); - IBinding basecl= name != null ? index.findBinding(name) : base.getBaseClass(); - ICElementHandle[] baseElems= IndexUI.findRepresentative(index, basecl); - for (ICElementHandle baseElem : baseElems) { - THGraphNode baseGraphNode= addNode(baseElem); - addMembers(index, baseGraphNode, basecl); - addEdge(graphNode, baseGraphNode); - if (handled.add(baseElem)) { - stack.add(baseElem); + IType baseType= base.getBaseClassType(); + if (baseType instanceof IBinding) { + final IBinding baseBinding = (IBinding) baseType; + ICElementHandle[] baseElems= IndexUI.findRepresentative(index, baseBinding); + for (ICElementHandle baseElem : baseElems) { + THGraphNode baseGraphNode= addNode(baseElem); + addMembers(index, baseGraphNode, baseBinding); + addEdge(graphNode, baseGraphNode); + if (handled.add(baseElem)) { + stack.add(baseElem); + } } } } From 474f8b9f37a4bdf38ced38d3ca0da67b9e95ad31 Mon Sep 17 00:00:00 2001 From: Mario Pierro Date: Tue, 2 Oct 2012 20:54:53 -0700 Subject: [PATCH 15/24] Bug 390979 - NullPointerException in BreakpointsMediator2.getPlatformBreakpoint() --- .../eclipse/cdt/dsf/debug/service/BreakpointsMediator2.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/BreakpointsMediator2.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/BreakpointsMediator2.java index 035a41991eb..7d2e4ed750c 100644 --- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/BreakpointsMediator2.java +++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/BreakpointsMediator2.java @@ -483,9 +483,11 @@ public class BreakpointsMediator2 extends AbstractDsfService implements IBreakpo for(Map.Entry> e: platformBPs.entrySet()) { // Stop at the first occurrence - for (ITargetBreakpointInfo tbp : e.getValue()) - if(tbp.getTargetBreakpoint().equals(bp)) + for (ITargetBreakpointInfo tbp : e.getValue()) { + IBreakpointDMContext targetBreakpoint = tbp.getTargetBreakpoint(); + if(targetBreakpoint != null && targetBreakpoint.equals(bp)) return e.getKey(); + } } } } From 8c98525c760f5b822c48e213e6ae4f46e199927e Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 3 Oct 2012 13:56:10 +0200 Subject: [PATCH 16/24] Bug 391001: Pointer to member in dependent expression. --- .../parser/tests/ast2/AST2TemplateTests.java | 18 +++- .../dom/parser/cpp/CPPASTUnaryExpression.java | 84 ++++++------------- .../parser/cpp/semantics/CPPSemantics.java | 4 +- .../dom/parser/cpp/semantics/EvalUnary.java | 45 +++++++++- .../composite/cpp/CPPCompositesFactory.java | 6 +- .../eclipse/cdt/internal/core/pdom/PDOM.java | 7 +- 6 files changed, 93 insertions(+), 71 deletions(-) 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 151c9235b71..cbabcf81b30 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 @@ -6042,5 +6042,21 @@ public class AST2TemplateTests extends AST2BaseTest { // } public void testFunctionSetWithNonMatchingTemplateArgs_379604() throws Exception { parseAndCheckBindings(getAboveComment(), CPP, true); - } + } + + // template struct C { + // typedef decltype(&T::m) dtm; + // }; + // struct X { + // int m() {return 0;} + // }; + // void f(int (X::*)()) {} + // void test() { + // f(&X::m); + // C::dtm v; + // f(v); + // } + public void testPointerToMemberAsDependentExpression_391001() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java index 290015f4052..5176d296cf5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java @@ -14,31 +14,23 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.LVALUE; -import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.PRVALUE; import org.eclipse.cdt.core.dom.ast.ASTVisitor; -import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTImplicitName; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IProblemBinding; -import org.eclipse.cdt.core.dom.ast.IProblemType; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; -import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; -import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalUnary; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.FunctionSetType; @@ -175,39 +167,6 @@ public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpres } } - private IType computePointerToMemberType() { - if (fOperator != op_amper) - return null; - - IASTNode child= fOperand; - boolean inParenthesis= false; - while (child instanceof IASTUnaryExpression && ((IASTUnaryExpression) child).getOperator() == IASTUnaryExpression.op_bracketedPrimary) { - child= ((IASTUnaryExpression) child).getOperand(); - inParenthesis= true; - } - if (child instanceof IASTIdExpression) { - IASTName name= ((IASTIdExpression) child).getName(); - if (name instanceof ICPPASTQualifiedName) { - IBinding b= name.resolveBinding(); - if (b instanceof ICPPMember) { - ICPPMember member= (ICPPMember) b; - if (!member.isStatic()) { - try { - if (!inParenthesis) { - return new CPPPointerToMemberType(member.getType(), member.getClassOwner(), false, false, false); - } else if (member instanceof IFunction) { - return new ProblemBinding(fOperand, IProblemBinding.SEMANTIC_INVALID_TYPE, fOperand.getRawSignature().toCharArray()); - } - } catch (DOMException e) { - return e.getProblem(); - } - } - } - } - } - return null; - } - @Override public ICPPFunction getOverload() { ICPPEvaluation eval = getEvaluation(); @@ -219,27 +178,34 @@ public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpres @Override public ICPPEvaluation getEvaluation() { if (fEvaluation == null) { - if (fOperand == null) - return EvalFixed.INCOMPLETE; - - final ICPPEvaluation arg = fOperand.getEvaluation(); - if (fOperator == op_bracketedPrimary) { - fEvaluation= arg; - } else if (arg.isFunctionSet() && fOperator == op_amper) { - return arg; - } else { - IType type= computePointerToMemberType(); - if (type != null) { - if (type instanceof IProblemType) - return EvalFixed.INCOMPLETE; - fEvaluation= new EvalFixed(type, PRVALUE, Value.UNKNOWN); - } else { - fEvaluation= new EvalUnary(fOperator, fOperand.getEvaluation()); - } - } + fEvaluation= computeEvaluation(); } return fEvaluation; } + + private ICPPEvaluation computeEvaluation() { + if (fOperand == null) + return EvalFixed.INCOMPLETE; + + final ICPPEvaluation nestedEval = fOperand.getEvaluation(); + if (fOperator == op_bracketedPrimary) + return nestedEval; + + if (nestedEval.isFunctionSet() && fOperator == op_amper) { + return nestedEval; + } + + IBinding addressOfQualifiedNameBinding= null; + if (fOperator == op_amper && fOperand instanceof IASTIdExpression) { + IASTName name= ((IASTIdExpression) fOperand).getName(); + if (name instanceof ICPPASTQualifiedName) { + addressOfQualifiedNameBinding= name.resolveBinding(); + if (addressOfQualifiedNameBinding instanceof IProblemBinding) + return EvalFixed.INCOMPLETE; + } + } + return new EvalUnary(fOperator, nestedEval, addressOfQualifiedNameBinding); + } @Override public IType getExpressionType() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 911a2b5d42c..98bcf4830b8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -3007,8 +3007,8 @@ public class CPPSemantics { return null; final IASTInitializerClause[] placement = expr.getPlacementArguments(); - final ICPPEvaluation arg1= new EvalUnary(IASTUnaryExpression.op_star, evaluation); - final ICPPEvaluation arg2= new EvalUnary(IASTUnaryExpression.op_sizeof, evaluation); + final ICPPEvaluation arg1= new EvalUnary(IASTUnaryExpression.op_star, evaluation, null); + final ICPPEvaluation arg2= new EvalUnary(IASTUnaryExpression.op_sizeof, evaluation, null); ICPPEvaluation[] args; if (placement == null) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java index 6b287f62b1f..2d2caec9208 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java @@ -37,14 +37,17 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.REF; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; +import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IPointerType; import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap; import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; @@ -55,8 +58,10 @@ import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPArithmeticConversion; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerToMemberType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; @@ -66,12 +71,14 @@ public class EvalUnary extends CPPEvaluation { private final int fOperator; private final ICPPEvaluation fArgument; + private final IBinding fAddressOfQualifiedNameBinding; private ICPPFunction fOverload= CPPFunction.UNINITIALIZED_FUNCTION; private IType fType; - public EvalUnary(int operator, ICPPEvaluation operand) { + public EvalUnary(int operator, ICPPEvaluation operand, IBinding addressOfQualifiedNameBinding) { fOperator= operator; fArgument= operand; + fAddressOfQualifiedNameBinding= addressOfQualifiedNameBinding; } public int getOperator() { @@ -82,6 +89,10 @@ public class EvalUnary extends CPPEvaluation { return fArgument; } + public IBinding getAddressOfQualifiedNameBinding() { + return fAddressOfQualifiedNameBinding; + } + @Override public boolean isInitializerList() { return false; @@ -142,6 +153,12 @@ public class EvalUnary extends CPPEvaluation { if (fArgument.isTypeDependent()) return null; + if (fAddressOfQualifiedNameBinding instanceof ICPPMember) { + ICPPMember member= (ICPPMember) fAddressOfQualifiedNameBinding; + if (!member.isStatic()) + return null; + } + IType type = fArgument.getTypeOrFunctionSet(point); type = SemanticUtil.getNestedType(type, TDEF | REF | CVTYPE); if (!CPPSemantics.isUserDefined(type)) @@ -180,6 +197,16 @@ public class EvalUnary extends CPPEvaluation { case op_throw: return CPPSemantics.VOID_TYPE; case op_amper: + if (fAddressOfQualifiedNameBinding instanceof ICPPMember) { + ICPPMember member= (ICPPMember) fAddressOfQualifiedNameBinding; + if (!member.isStatic()) { + try { + return new CPPPointerToMemberType(member.getType(), member.getClassOwner(), false, false, false); + } catch (DOMException e) { + return e.getProblem(); + } + } + } return new CPPPointerType(fArgument.getTypeOrFunctionSet(point)); case op_star: IType type= fArgument.getTypeOrFunctionSet(point); @@ -270,21 +297,31 @@ public class EvalUnary extends CPPEvaluation { buffer.putByte(ITypeMarshalBuffer.EVAL_UNARY); buffer.putByte((byte) fOperator); buffer.marshalEvaluation(fArgument, includeValue); + buffer.marshalBinding(fAddressOfQualifiedNameBinding); } public static ISerializableEvaluation unmarshal(int firstByte, ITypeMarshalBuffer buffer) throws CoreException { int op= buffer.getByte(); ICPPEvaluation arg= (ICPPEvaluation) buffer.unmarshalEvaluation(); - return new EvalUnary(op, arg); + IBinding binding= buffer.unmarshalBinding(); + return new EvalUnary(op, arg, binding); } @Override public ICPPEvaluation instantiate(ICPPTemplateParameterMap tpMap, int packOffset, ICPPClassSpecialization within, int maxdepth, IASTNode point) { ICPPEvaluation argument = fArgument.instantiate(tpMap, packOffset, within, maxdepth, point); - if (argument == fArgument) + IBinding aoqn = fAddressOfQualifiedNameBinding; + if (aoqn instanceof ICPPUnknownBinding) { + try { + aoqn= CPPTemplates.resolveUnknown((ICPPUnknownBinding) aoqn, tpMap, packOffset, within, point); + } catch (DOMException e) { + } + } + if (argument == fArgument && aoqn == fAddressOfQualifiedNameBinding) return this; - return new EvalUnary(fOperator, argument); + + return new EvalUnary(fOperator, argument, aoqn); } @Override diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index 90a74285f94..2c067f2bbab 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -372,8 +372,10 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { EvalUnary e= (EvalUnary) eval; ICPPEvaluation a = e.getArgument(); ICPPEvaluation a2 = getCompositeEvaluation(a); - if (a != a2) - e= new EvalUnary(e.getOperator(), a2); + IBinding b= e.getAddressOfQualifiedNameBinding(); + IBinding b2= getCompositeBinding((IIndexFragmentBinding) b); + if (a != a2 || b != b2) + e= new EvalUnary(e.getOperator(), a2, b2); return e; } if (eval instanceof EvalUnaryTypeID) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index b1c9472f4dc..6365dcb2aac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -224,10 +224,11 @@ public class PDOM extends PlatformObject implements IPDOM { * 132.0 - Explicit virtual overrides, bug 380623. * 133.0 - Storing template arguments via direct marshalling, bug 299911. * 134.0 - Storing unknown bindings via direct marshalling, bug 381824. + * 135.0 - Changed marshalling of EvalUnary, bug 391001. */ - private static final int MIN_SUPPORTED_VERSION= version(134, 0); - private static final int MAX_SUPPORTED_VERSION= version(134, Short.MAX_VALUE); - private static final int DEFAULT_VERSION = version(134, 0); + private static final int MIN_SUPPORTED_VERSION= version(135, 0); + private static final int MAX_SUPPORTED_VERSION= version(135, Short.MAX_VALUE); + private static final int DEFAULT_VERSION = version(135, 0); private static int version(int major, int minor) { return (major << 16) + minor; From afda71bc567c7da5dbabce59d8182385d923d0c2 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Wed, 3 Oct 2012 11:04:04 -0400 Subject: [PATCH 17/24] Bug 363688 - CDT issues "auto-solib-add on" command to gdb with invalid syntax --- .../win32/StandardWinCommandFactory.java | 19 +------------ .../factories/win32/WinMIGDBSetAutoSolib.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/WinMIGDBSetAutoSolib.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/StandardWinCommandFactory.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/StandardWinCommandFactory.java index 76a66f0640a..e4aee9f6177 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/StandardWinCommandFactory.java +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/StandardWinCommandFactory.java @@ -49,24 +49,7 @@ public class StandardWinCommandFactory extends StandardCommandFactory { @Override public MIGDBSetAutoSolib createMIGDBSetAutoSolib( boolean set ) { - // Suppress "set auto-solib" - returns error on Windows - return new MIGDBSetAutoSolib( getMIVersion(), true ) { - - @Override - public String getOperation() { - return ""; //$NON-NLS-1$ - } - - @Override - public String[] getOptions() { - return new String[0]; - } - - @Override - public String[] getParameters() { - return new String[0]; - } - }; + return new WinMIGDBSetAutoSolib( getMIVersion(), set ); } @Override diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/WinMIGDBSetAutoSolib.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/WinMIGDBSetAutoSolib.java new file mode 100644 index 00000000000..cbbd491d71d --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/WinMIGDBSetAutoSolib.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2012 Mentor Graphics and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mentor Graphics - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.debug.mi.core.command.factories.win32; + +import org.eclipse.cdt.debug.mi.core.command.MIGDBSetAutoSolib; + +/** + * Suppress "set auto-solib" - returns error on Windows + */ +class WinMIGDBSetAutoSolib extends MIGDBSetAutoSolib { + + public WinMIGDBSetAutoSolib(String miVersion, boolean isSet) { + super(miVersion, isSet); + setOperation(""); //$NON-NLS-1$ + setOptions(new String[0]); + setParameters(new String[0]); + } +} From 0596ffc0d2296a74843ac166a1daf248519696cf Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Wed, 3 Oct 2012 11:39:28 -0400 Subject: [PATCH 18/24] Bug 386156 - IllegalArgumentException in ThreadVMNode --- .../cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java index eec89059d50..89e3a2a7a88 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java @@ -18,7 +18,6 @@ import java.util.Map; import org.eclipse.cdt.debug.internal.ui.pinclone.PinCloneUtils; import org.eclipse.cdt.debug.ui.IPinProvider.IPinElementColorDescriptor; -import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants; import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor; import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.cdt.dsf.datamodel.IDMContext; @@ -316,7 +315,7 @@ public class ThreadVMNode extends AbstractThreadVMNode final IThreadDMContext threadDmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IThreadDMContext.class); if (processService == null || threadDmc == null) { - update.setStatus(new Status(IDsfStatusConstants.INVALID_HANDLE, GdbUIPlugin.PLUGIN_ID, "Service or handle invalid", null)); //$NON-NLS-1$ + update.setStatus(new Status(IStatus.ERROR, GdbUIPlugin.PLUGIN_ID, "Service or handle invalid", null)); //$NON-NLS-1$ } else { processService.getExecutionData( threadDmc, From 3979620d970ff2b3e68749649b4ba525c50c5f54 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 5 Oct 2012 09:16:27 +0200 Subject: [PATCH 19/24] Bug 391190: Using address as template argument. --- .../core/parser/tests/ast2/AST2TemplateTests.java | 15 +++++++++++++++ .../cdt/internal/core/dom/parser/Value.java | 5 ++++- .../core/pdom/dom/cpp/PDOMCPPClassScope.java | 6 +++++- 3 files changed, 24 insertions(+), 2 deletions(-) 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 cbabcf81b30..ccef1360111 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 @@ -6059,4 +6059,19 @@ public class AST2TemplateTests extends AST2BaseTest { public void testPointerToMemberAsDependentExpression_391001() throws Exception { parseAndCheckBindings(getAboveComment(), CPP, true); } + + // class Memory { }; + // Memory memory; + // template struct Container { + // struct iterator { + // int test; + // }; + // }; + // int main() { + // Container<&memory>::iterator it; + // it.test; // Field 'test' could not be resolved + // } + public void testAddressAsTemplateArgument_391190() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java index 8fb39d3c2e7..a0bd08dcc20 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java @@ -370,7 +370,10 @@ public class Value implements IValue { * Tests whether the value depends on a template parameter. */ public static boolean isDependentValue(IValue nonTypeValue) { - return nonTypeValue != null && nonTypeValue.getEvaluation() != null; + if (nonTypeValue == null) + return false; + ICPPEvaluation eval = nonTypeValue.getEvaluation(); + return eval != null && eval.isValueDependent(); } /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java index 0be176e51d3..a3a8017e8da 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java @@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; @@ -159,7 +160,10 @@ class PDOMCPPClassScope implements ICPPClassScope, IIndexScope { if (!lookup.isPrefixLookup()) { if (CharArrayUtils.equals(fBinding.getNameCharArray(), nameChars)) { if (CPPClassScope.shallReturnConstructors(lookup.getLookupName(), false)){ - return fBinding.getConstructors(); + if (fBinding instanceof ICPPClassSpecialization) { + return ((ICPPClassSpecialization) fBinding).getConstructors(lookup.getLookupPoint()); + } + return fBinding.getConstructors(); } return new IBinding[] {getClassNameBinding()}; } From e8d0c48cb093184471c422e246685120fb6872f9 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Mon, 8 Oct 2012 07:56:27 +0200 Subject: [PATCH 20/24] Bug 391284: Updating the list of the base classes did not work correctly. --- .../index/tests/IndexUpdateTests.java | 40 +++++++++++++++++++ .../core/pdom/dom/cpp/PDOMCPPClassType.java | 31 ++++++++------ 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexUpdateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexUpdateTests.java index c25c43b7e29..80faf0f2e50 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexUpdateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexUpdateTests.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.IVariable; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; @@ -1461,4 +1462,43 @@ public class IndexUpdateTests extends IndexTestBase { fIndex.releaseReadLock(); } } + + // struct Base { + // void foo() {} + // }; + // struct Derived: Base { + // Derived(); + // }; + + // struct Base { + // void foo() {} + // }; + // struct Derived: Base { + // Derived(); + // }; + public void testBaseClass_Bug391284() throws Exception { + setupFile(2, true); + fIndex.acquireReadLock(); + try { + final ICPPClassType s = (ICPPClassType) findBinding("Derived"); + assertNotNull(s); + final ICPPBase[] bases = s.getBases(); + assertEquals(1, bases.length); + assertEquals("Base", bases[0].getBaseClass().getName()); + } finally { + fIndex.releaseReadLock(); + } + updateFile(); + + fIndex.acquireReadLock(); + try { + final ICPPClassType s = (ICPPClassType) findBinding("Derived"); + assertNotNull(s); + final ICPPBase[] bases = s.getBases(); + assertEquals(1, bases.length); + assertEquals("Base", bases[0].getBaseClass().getName()); + } finally { + fIndex.releaseReadLock(); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java index 33b513eab94..bbe9d762471 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -37,6 +37,8 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; +import org.eclipse.cdt.internal.core.pdom.PDOM; +import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; @@ -155,33 +157,38 @@ class PDOMCPPClassType extends PDOMCPPBinding implements IPDOMCPPClassType, IPDO } public void removeBases(PDOMName classDefName) throws CoreException { - getPDOM().removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); + final PDOM pdom = getPDOM(); + final Database db = getDB(); + pdom.removeCachedResult(record+PDOMCPPLinkage.CACHE_BASES); + PDOMCPPBase base= getFirstBase(); - PDOMCPPBase predecessor= null; + PDOMCPPBase prevBase= null; long nameRec= classDefName.getRecord(); boolean deleted= false; while (base != null) { PDOMCPPBase nextBase = base.getNextBase(); - long classDefRec= getDB().getRecPtr(base.getRecord() + PDOMCPPBase.CLASS_DEFINITION); + long classDefRec= db.getRecPtr(base.getRecord() + PDOMCPPBase.CLASS_DEFINITION); if (classDefRec == nameRec) { deleted= true; base.delete(); - } else if (deleted) { - deleted= false; - if (predecessor == null) { - setFirstBase(base); - } else { - predecessor.setNextBase(base); + } else { + if (deleted) { + deleted= false; + if (prevBase == null) { + setFirstBase(base); + } else { + prevBase.setNextBase(base); + } } - predecessor= base; + prevBase= base; } base= nextBase; } if (deleted) { - if (predecessor == null) { + if (prevBase == null) { setFirstBase(null); } else { - predecessor.setNextBase(null); + prevBase.setNextBase(null); } } } From 0a4f6638ce212b8562e40e9ba899d1ee51f93b0f Mon Sep 17 00:00:00 2001 From: Abeer Bagul Date: Fri, 5 Oct 2012 10:46:17 +0530 Subject: [PATCH 21/24] Bug 391185 - Do not cancel running source lookup job if framedata is identical Change-Id: I879e640e976a1c1279587416e615356e596aaf1e --- .../cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java index 5e322b82711..d5c16747f9e 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Wind River Systems - initial API and implementation + * Tensilica (Abeer Bagul) - fix for bug 391185 *******************************************************************************/ package org.eclipse.cdt.dsf.debug.ui.sourcelookup; @@ -749,7 +750,6 @@ public class DsfSourceDisplayAdapter implements ISourceDisplay, ISteppingControl private void startLookupJob(final FrameData frameData, final IWorkbenchPage page, boolean eventTriggered) { // If there is a previous lookup job running, cancel it. if (fRunningLookupJob != null) { - fRunningLookupJob.cancel(); if (!eventTriggered && frameData.isIdentical(fRunningLookupJob.fFrameData)) { // identical location - we are done return; From 516e23c935fa12f30c37a395dfcf794a05927f87 Mon Sep 17 00:00:00 2001 From: mhussein Date: Tue, 9 Oct 2012 08:51:17 +0200 Subject: [PATCH 22/24] Bug 389392 - Editor refresh problem when template executed twice Modify OpenFiles so that it doesn't attempt to open files if they are already opened. Update: added copyright message. Change-Id: I09fd41b3b34d2b1469cc11a8678f99645a0f9c43 Reviewed-on: https://git.eclipse.org/r/7725 Reviewed-by: Marc-Andre Laperle IP-Clean: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../templateengine/processes/OpenFiles.java | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/core/org.eclipse.cdt.ui/templateengine/org/eclipse/cdt/ui/templateengine/processes/OpenFiles.java b/core/org.eclipse.cdt.ui/templateengine/org/eclipse/cdt/ui/templateengine/processes/OpenFiles.java index 4bd137979df..90fff3c7dfd 100644 --- a/core/org.eclipse.cdt.ui/templateengine/org/eclipse/cdt/ui/templateengine/processes/OpenFiles.java +++ b/core/org.eclipse.cdt.ui/templateengine/org/eclipse/cdt/ui/templateengine/processes/OpenFiles.java @@ -7,6 +7,7 @@ * * Contributors: * Marc-Andre Laperle - Initial API and implementation + * Mohamed Hussein (Mentor Graphics) - Bug 389392 fix refresh when open existing editor *******************************************************************************/ package org.eclipse.cdt.ui.templateengine.processes; @@ -19,6 +20,10 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; @@ -43,11 +48,15 @@ public class OpenFiles extends ProcessRunner { IProject projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); IFile iFile = projectHandle.getFile(fileTargetPath); if (iFile.exists()) { - try { - IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), - iFile); - } catch (PartInitException e) { - throw new ProcessFailureException(Messages.OpenFiles_CannotOpen_error + fileTargetPath); + // Only open files if they are not open to avoid refresh problem if files have been modified multiple times + if (!isOpen(iFile)) { + try { + IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), + iFile); + } catch (PartInitException e) { + throw new ProcessFailureException(Messages.OpenFiles_CannotOpen_error + + fileTargetPath); + } } } else { @@ -55,5 +64,23 @@ public class OpenFiles extends ProcessRunner { } } } + + private boolean isOpen(IFile file) { + IEditorReference[] editorReferences = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); + if (editorReferences != null) { + IEditorInput editorInput; + for (IEditorReference editorReference : editorReferences) { + try { + editorInput = editorReference.getEditorInput(); + if (editorInput instanceof IFileEditorInput + && file.equals(((IFileEditorInput)editorInput).getFile())) { + return true; + } + } catch (PartInitException e) {} + } + } + + return false; + } } From b1a7526c66ea40b4c7c80992723c505cdb93edfe Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Thu, 11 Oct 2012 00:44:18 -0400 Subject: [PATCH 23/24] Bug 375221 - [4.x] Resource config menu shows up in context menus --- core/org.eclipse.cdt.ui/plugin.xml | 80 ++++++++++++++---------------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 1b697a4b5ab..f9adf2325e0 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -4390,53 +4390,45 @@ label="%ResourceConfigurations.menu"> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - Date: Sat, 13 Oct 2012 18:25:17 -0400 Subject: [PATCH 24/24] Remove fragment jars. Add missing property files. (Cherry picked 8_0) --- .../META-INF/MANIFEST.MF | 1 - core/org.eclipse.cdt.core.aix/build.properties | 3 ++- core/org.eclipse.cdt.core.aix/cdtaix.jar | Bin 3715 -> 0 bytes core/org.eclipse.cdt.core.aix/plugin.properties | 2 ++ .../META-INF/MANIFEST.MF | 1 - core/org.eclipse.cdt.core.linux/build.properties | 3 ++- core/org.eclipse.cdt.core.linux/cdt_linux.jar | Bin 3736 -> 0 bytes .../org.eclipse.cdt.core.linux/plugin.properties | 2 ++ .../META-INF/MANIFEST.MF | 1 - .../org.eclipse.cdt.core.macosx/build.properties | 3 ++- core/org.eclipse.cdt.core.macosx/cdt_macosx.jar | Bin 3146 -> 0 bytes .../plugin.properties | 2 ++ .../META-INF/MANIFEST.MF | 1 - .../build.properties | 3 ++- .../org.eclipse.cdt.core.solaris/cdt_solaris.jar | Bin 3128 -> 0 bytes .../plugin.properties | 2 ++ .../META-INF/MANIFEST.MF | 1 - core/org.eclipse.cdt.core.win32/build.properties | 3 ++- core/org.eclipse.cdt.core.win32/cdt_win32.jar | Bin 3641 -> 0 bytes .../org.eclipse.cdt.core.win32/plugin.properties | 2 ++ 20 files changed, 20 insertions(+), 10 deletions(-) delete mode 100644 core/org.eclipse.cdt.core.aix/cdtaix.jar create mode 100644 core/org.eclipse.cdt.core.aix/plugin.properties delete mode 100644 core/org.eclipse.cdt.core.linux/cdt_linux.jar create mode 100644 core/org.eclipse.cdt.core.linux/plugin.properties delete mode 100644 core/org.eclipse.cdt.core.macosx/cdt_macosx.jar create mode 100644 core/org.eclipse.cdt.core.macosx/plugin.properties delete mode 100644 core/org.eclipse.cdt.core.solaris/cdt_solaris.jar create mode 100644 core/org.eclipse.cdt.core.solaris/plugin.properties delete mode 100644 core/org.eclipse.cdt.core.win32/cdt_win32.jar create mode 100644 core/org.eclipse.cdt.core.win32/plugin.properties diff --git a/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF index a238bc8a7ca..1ee36ed73f0 100644 --- a/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF @@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2 Bundle-Name: %fragmentName.aix Bundle-SymbolicName: org.eclipse.cdt.core.aix; singleton:=true Bundle-Version: 5.1.1.qualifier -Bundle-ClassPath: cdtaix.jar Bundle-Vendor: %providerName Fragment-Host: org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)" Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.core.aix/build.properties b/core/org.eclipse.cdt.core.aix/build.properties index 1c593888d45..4cc40daacc3 100644 --- a/core/org.eclipse.cdt.core.aix/build.properties +++ b/core/org.eclipse.cdt.core.aix/build.properties @@ -13,6 +13,7 @@ bin.includes = fragment.xml,\ .,\ about.html,\ META-INF/,\ - os/ + os/,\ + plugin.properties src.includes = library/,\ about.html diff --git a/core/org.eclipse.cdt.core.aix/cdtaix.jar b/core/org.eclipse.cdt.core.aix/cdtaix.jar deleted file mode 100644 index ed750248701dd05a94917c1005b67815140e4e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3715 zcmb7`3p~^7AIIks8jItWTV#gZ=D0;C$^AAY#?g*Tj8WLMO^v8%Nk}nsSGkpPOD++T zGf5Zs9oH~ainO`x%zBG{DYG|mu(7mohC}Tw7wn%rwu5Ov zyFoAw)s82fl}b4zi>M#vcKHg^qt|{Vb_aKD2?06>;n3FR;M>Q&3ohg7P z38;(dM#C0FBXmgd^YLo&FehBRnBhV)Q#Y)RPzU%_4d7!ntO7m{Zq^Ee_5WP&-xUJu z3O{7fp%9$k50pY*DUrVTAE+h2p+1Dh`(e@EK|ip`{>X;JV1HB~_#eIAhX|i@uWeo1 z<@BIM4gi3_1pw&%J3khK^uyuo4&m?+EhsX`8;2u1*<*T*g(9_0ZSh+m900&p6+x8IeJKpkF4Self8E_r#5i?KAukr7>k$%uqr8MZm z_;z>UYrA|ITY4)>uEbUY#HbQ+-Z(cNN;|;FRq}9B&;0CtJf!`&mMw%5p3(}I1mei?;%f8D~NTMx`N-zn|1XgGAZW18BcDSsc9ycT%?Y?ut^*Dj4Fthe#YzD z2-$m~>Td2(_?#G1Gps$_^SQPL0e(EbiIUsVy~d(vIw9z%wO1X? zNKS~Cn(cyBmEOEQr;B`5RLODCZVuVJsExP+>KuOw{ z>Tn$&4E^6PcXoOK61yt)`xqoJV;^salg#H2rennlovgsmOiC2DPA6ZUHn?arVMRwu zi<`~5M~E7VcE>i!WKS>Ki}9lr4`K?&`Ug1xK&ZuOzxiACq)NDP2y~Pad-1vX8lcuIpTZ zlvzHYZ?5=Y?bPqBK0E8_dB6v)N|Zjk2&|T@b)?Kpg|(Ll4>tLRfe#~GHMzG@-$y93 zw>64y*|az)XKU%=Xby$KrabHgdU_pNV0&4-DDuaoTd*-?vU9lQr12JPrG!uiLK zbWHGXYeSM75y4vsDPa|6@+q&HP6#KIzf5lqa$?H6+;&uO<*KjZthts`bSIc#KZGkX+xd7v z(QLH+Asu_mzfGFhp47HKG#aq1YXn~ANbSy~5c(xLWiDn6?tLQr*HsCJ&LB+gGHAxD zEbCXhxh`G&wde+Ug{LM_VY3UMg%`L z?33{mJ>ltg6m^?&wrYo3jVa7Ktz2cmX{7YNczl_MI8ofaV#xd0sb;^UIopT`&4eLo zOhUQ@a`H^$;Pe@}bI^0l2oSkm_^!9M=9#Z_~rB1h+=aW)Fb zd%CN5`<1bi4DDbZFP*?U!?6MUR!5z0p8r`hc#}Lwd;ajFS7xq#@NRP{rlIDh?pTWU zvH~Y)yk#UWp+3>CvlT1?%*+^u`=|l5E@+>L^y?auHs?namQQjj@H;a1U>Smc5S?s#>^E|r`dGNPR+8-*N}_c^{0VoGby;hoy* zkFrzd+x7=g7Wwe@L_&t8rR<;MDR}C>($^u7%AUE}7-gYC!}AfNRXUvZk0bg$tS@OHP$OxoZ4g=aLM!6kSm?itDfX zZ3^4f@6O$F_5HQizAsCP?jja`q~S1$)`A8x+<&&cyr{CuUvDkMmpCP!Qqgf-nyPgJO)Ib4)|_a)zdCi3O#D2E~XX!fl^F>$e;KJfVfeUXpwv(d~xU2mB-*j8KjbNaVp#81T8@s#ZAj zmy-GRiYy$noa0q$jB9MptWeDofh``TE4> z;I$zH_+V1aTCP#?r<~vB;tfatx?_Wqzwcyo^4ehM;$Tq$JJ%=Y8a034&F1C}x8^t8 zUr_Y-!>~DeBMjpl4VD}Ma?A4^_Ku|Z^CC;0kQ-bg^;`40&;&S*#2CYBKZ;Ag$mSmbER&;Im3 DPI9Jw diff --git a/core/org.eclipse.cdt.core.aix/plugin.properties b/core/org.eclipse.cdt.core.aix/plugin.properties new file mode 100644 index 00000000000..a7caa474ef7 --- /dev/null +++ b/core/org.eclipse.cdt.core.aix/plugin.properties @@ -0,0 +1,2 @@ +fragmentName.linux=C/C++ Development Tools Core for AIX +providerName=Eclipse CDT diff --git a/core/org.eclipse.cdt.core.linux/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.linux/META-INF/MANIFEST.MF index 80e45316a4e..b8c60b0b498 100644 --- a/core/org.eclipse.cdt.core.linux/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.linux/META-INF/MANIFEST.MF @@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2 Bundle-Name: %fragmentName.linux Bundle-SymbolicName: org.eclipse.cdt.core.linux; singleton:=true Bundle-Version: 5.2.0.qualifier -Bundle-ClassPath: cdt_linux.jar Bundle-Vendor: %providerName Fragment-Host: org.eclipse.cdt.core;bundle-version="[5.2.0,6.0.0)" Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.core.linux/build.properties b/core/org.eclipse.cdt.core.linux/build.properties index 6542e91cbdf..cfcc7204fc7 100644 --- a/core/org.eclipse.cdt.core.linux/build.properties +++ b/core/org.eclipse.cdt.core.linux/build.properties @@ -11,7 +11,8 @@ bin.includes = fragment.xml,\ about.html,\ .,\ - META-INF/ + META-INF/,\ + plugin.properties src.includes = about.html,\ library/ source.. = src/ diff --git a/core/org.eclipse.cdt.core.linux/cdt_linux.jar b/core/org.eclipse.cdt.core.linux/cdt_linux.jar deleted file mode 100644 index d52f913efb2e6f8744268de13639c738625ed03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3736 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 Y4i0I31T_s=hk#mNtuHs5 zCl316NY@ep(>F#PGToH10~+YEOz2RNJ^gD>`iK8pnGwQRAEj$ysc3{+GHPozM8g!j zxY02A_O^~nbEO{Dkx4%VgZ5?xG)#wm*F=GJn&82Q(!sUY zq#yu4k6z*rS0%2 zXgl^msl%}b>3QbGa!utlkGPWAGJCPhP z74>GQIT^XSLQB|nEeY7rZlyXo`lp&|&+krc4>f_XxBIV?k7a~ppEYkBRV6&Z@x;%v zAv@~oA}C{^r}HihwrdcGCEtqik zWrZ=s_rKxqjI{r3l?|8e}^tIE&==fAnCtY$34toYX* z7W<_gd9CiYmfwR@f3(fSd;x-x zLpdWsxI30d+{X zr8wB>m%aCzm+DEmvw2!GF9^1rqjC+9JJbE1FO_;P^VKU8(wQW5s^8f`mX%`UQOd=G zGW*X9Eu_W}K~E`yC1qxTmcQo>AFid$;p`68q*D~f`9npZ6QRg@pa10azgl_Vn7}#6 zAre8`4}33rNU3ogeT~ACC>t0n3g%w}G*sqLZ}+tJPP$;0#x(olsp+{Ya)WM}w#EOA zXdQo z7A%YBxwFy2>*W|84w6sGd{{MG>2$%lnVCE%Xoj{It3!>#IOi#zNq4ace>csF-wes5 z^ac4-&R0N{&3&$<*C>0m`xxzJLSKp_`_bO}<3m!J~)f-~8I7fzEZVyZpBw8vu-&MPVK%o@eT zH)RQ{th$gEBQtn4cv@vKwi7O&2D=phL9S&)2P$x+;!G(QpNxpQBiJU%_fptCJ-)G3 zmo$Vox@^+rES3kGg@qE&C|_TTqI`Z7IDag<_zrV<4Z+1Ax3>G!a;{d%vvkVMd+Ty$ z!!{>M^Yta;#E(>3k*2T8YjocypJ+WqU_-z?OqdYv^(IbQ-38hg4Qzv`Dhn`KcfQzY zo68`>{1^G7Y3F)!lAl9M4wvq;E%6izegWQB9nsV*&L2%9*Ushd*WT0kt}uwJ^tFlh z|BzMpXmj}Ibw5G8*ijVv2+{c5}sOWb5#9SX5|7MCJeyZ%{-tt?bEAK1iXkX71csrtjtqpQf993NU zgx!UCcUQO&iTxb!X<~bI2DA|#*=V(PJX`T3#Uz0j$88-JYb9hg79cLEZjGE6gi&RG ziMds0-dwGAt6M*_YJLRSl7=dhOhEyLO%G3(h==$Kt%9YaLKirm7NI*6P4orxh{oY4 zm4&QzYU`&@5135ROw9Z&Kj$g>W=kJnz#M{c{f4f#Y(M5JhL|x5@cZfKueNV!Yp22t zCfXQaz$e5V`t1fGZPolSBW*kSHXYl<^m8YJnKlNa78BD(tu5yULH*p#V5n{Pp&z)v zA*!FpFqmpP#&xHdO~U$l7K5?2v-18iYn!;XGJnimTd7s}sehmOJ%Me{`bLrOx8Us} qn)F4$nDuXG;_I{g@({i@zENa*LpDXT0U1G@^rMGPjmC@@1HfOQmYP%m diff --git a/core/org.eclipse.cdt.core.solaris/plugin.properties b/core/org.eclipse.cdt.core.solaris/plugin.properties new file mode 100644 index 00000000000..6b680ec07d0 --- /dev/null +++ b/core/org.eclipse.cdt.core.solaris/plugin.properties @@ -0,0 +1,2 @@ +fragmentName.linux=C/C++ Development Tools Core for Solaris +providerName=Eclipse CDT diff --git a/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF index e8227526a50..e1f24800250 100644 --- a/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF @@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2 Bundle-Name: %fragmentName.win32 Bundle-SymbolicName: org.eclipse.cdt.core.win32; singleton:=true Bundle-Version: 5.3.0.qualifier -Bundle-ClassPath: cdt_win32.jar Bundle-Vendor: %providerName Fragment-Host: org.eclipse.cdt.core;bundle-version="[5.2.0,6.0.0)" Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.core.win32/build.properties b/core/org.eclipse.cdt.core.win32/build.properties index 3805517ebdd..5afcaa0bc45 100644 --- a/core/org.eclipse.cdt.core.win32/build.properties +++ b/core/org.eclipse.cdt.core.win32/build.properties @@ -11,7 +11,8 @@ bin.includes = fragment.xml,\ about.html,\ .,\ - META-INF/ + META-INF/,\ + plugin.properties src.includes = about.html,\ library/ source.. = src/ diff --git a/core/org.eclipse.cdt.core.win32/cdt_win32.jar b/core/org.eclipse.cdt.core.win32/cdt_win32.jar deleted file mode 100644 index ba72d9299ed5109acfe2de4f66bafe4638c05138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 H=F@)x1pK!q diff --git a/core/org.eclipse.cdt.core.win32/plugin.properties b/core/org.eclipse.cdt.core.win32/plugin.properties new file mode 100644 index 00000000000..0b31b3ca94e --- /dev/null +++ b/core/org.eclipse.cdt.core.win32/plugin.properties @@ -0,0 +1,2 @@ +fragmentName.linux=C/C++ Development Tools Core for Windows +providerName=Eclipse CDT
    Option Explanation