diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/TestSourceReader.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/TestSourceReader.java
index 913fc570a16..3516b8c3b79 100644
--- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/TestSourceReader.java
+++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/testplugin/util/TestSourceReader.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2006, 2008 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
@@ -51,6 +51,9 @@ import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.osgi.framework.Bundle;
+/**
+ * Utilities for reading test source code from plug-in .java sources
+ */
public class TestSourceReader {
/**
@@ -85,7 +88,7 @@ public class TestSourceReader {
List contents = new ArrayList();
StringBuffer content = new StringBuffer();
for(String line = br.readLine(); line!=null; line = br.readLine()) {
- line = line.trim();
+ line = line.replaceFirst("^\\s*", ""); // replace leading whitespace, preserve trailing
if(line.startsWith("//")) {
content.append(line.substring(2)+"\n");
} else {
@@ -113,7 +116,7 @@ public class TestSourceReader {
* @param lookfor string to be searched for
* @param fullPath full path of the workspace file
* @return the offset or -1
- * @throws CoreException
+ * @throws Exception
* @throws UnsupportedEncodingException
* @since 4.0
*/
diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
index 73654d909e8..f2d149ea133 100644
--- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
@@ -96,5 +96,5 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.filebuffers;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)",
org.eclipse.ltk.core.refactoring;bundle-version="3.4.0"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICDescriptor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICDescriptor.java
index abf49527609..f12ff90d5db 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICDescriptor.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICDescriptor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 QNX Software Systems and others.
+ * Copyright (c) 2000, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.core;
@@ -15,9 +16,16 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.w3c.dom.Element;
+/**
+ * Models meta-data stored with a CDT project
+ */
public interface ICDescriptor {
public ICOwnerInfo getProjectOwner();
public String getPlatform();
+
+ /**
+ * @return the associated project
+ */
public IProject getProject();
public ICExtensionReference[] get(String extensionPoint);
@@ -27,7 +35,18 @@ public interface ICDescriptor {
public void remove(ICExtensionReference extension) throws CoreException;
public void remove(String extensionPoint) throws CoreException;
+ /**
+ * @param id an identifier that uniquely identifies the client
+ * @return a non-null {@link Element} to which client specific meta-data may be attached
+ * @throws CoreException
+ */
public Element getProjectData(String id) throws CoreException;
+
+ /**
+ * Saves any changes made to {@link Element} objects obtained from {@link #getProjectData(String)}
+ * to a CDT defined project meta-data file.
+ * @throws CoreException
+ */
public void saveProjectData() throws CoreException;
ICConfigurationDescription getConfigurationDescription();
diff --git a/core/org.eclipse.cdt.ui.tests/.settings/org.eclipse.jdt.core.prefs b/core/org.eclipse.cdt.ui.tests/.settings/org.eclipse.jdt.core.prefs
index f683c141712..19476feb871 100644
--- a/core/org.eclipse.cdt.ui.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/core/org.eclipse.cdt.ui.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,8 @@
-#Wed Nov 28 11:16:20 CET 2007
+#Tue Jan 29 13:30:09 GMT 2008
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -11,6 +12,8 @@ org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=
org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -19,16 +22,34 @@ org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
@@ -41,13 +62,17 @@ org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.4
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
diff --git a/core/org.eclipse.cdt.ui.tests/plugin.xml b/core/org.eclipse.cdt.ui.tests/plugin.xml
index 4a378d1304d..72140c1c76f 100644
--- a/core/org.eclipse.cdt.ui.tests/plugin.xml
+++ b/core/org.eclipse.cdt.ui.tests/plugin.xml
@@ -32,10 +32,10 @@
+ relative="org.eclipse.ui.views.TaskList">
@@ -115,5 +115,87 @@
projectType="org.eclipse.cdt.build.core.buildArtefactType.exe">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/org.eclipse.cdt.ui.tests/resources/docComments/this.cpp b/core/org.eclipse.cdt.ui.tests/resources/docComments/this.cpp
new file mode 100644
index 00000000000..b24e4f4814e
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/resources/docComments/this.cpp
@@ -0,0 +1,24 @@
+// N.B: Character positions in this file are hard-coded into expected results in
+// DocCommentHightlightTest.
+
+/* normal0 */
+/*A comment1___ */
+/*B comment2__ */
+/*C comment3_ *//*D comment4___ */
+/*E comment5____ *//*F comment6_ */
+/*G comment7
+*//*F comment8_ *//*! __comment9 */
+/**
+comment10
+*/
+
+// snormal0
+//A scomment1__
+//B scomment2_
+//C scomment3__
+//! _scomment4
+//* scomment5___
+
+/*# comment11_ #*/ // scomment6__
+/*# comment12__ #*/ //# __scomment7
+
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AbstractAutoEditTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AbstractAutoEditTest.java
new file mode 100644
index 00000000000..10cb5cb0430
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/AbstractAutoEditTest.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 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:
+ * Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Sergey Prigogin, Google
+ * Andrew Ferguson (Symbian)
+ *******************************************************************************/
+package org.eclipse.cdt.ui.tests.text;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.DocumentCommand;
+import org.eclipse.jface.text.IAutoEditStrategy;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.TextUtilities;
+
+import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
+import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
+import org.eclipse.cdt.ui.testplugin.CTestPlugin;
+
+/**
+ * IAutoEditStrategy related tests
+ */
+public class AbstractAutoEditTest extends BaseTestCase {
+
+ protected AbstractAutoEditTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Helper class to test the auto-edit strategies on a document.
+ * Split out from CAutoIndentTest.
+ */
+ protected static class AutoEditTester {
+
+ private Map fStrategyMap = new HashMap();
+ IDocument fDoc;
+ private String fPartitioning;
+ private int fCaretOffset;
+
+ public AutoEditTester(IDocument doc, String partitioning) {
+ super();
+ fDoc = doc;
+ fPartitioning = partitioning;
+ }
+
+ public void setAutoEditStrategy(String contentType, IAutoEditStrategy aes) {
+ fStrategyMap.put(contentType, aes);
+ }
+
+ public IAutoEditStrategy getAutoEditStrategy(String contentType) {
+ return (IAutoEditStrategy)fStrategyMap.get(contentType);
+ }
+
+ /**
+ * Empties the document, and returns the caret to the origin (0,0)
+ * @return this
for method chaining
+ */
+ public AutoEditTester reset() {
+ try {
+ goTo(0,0);
+ fDoc.set("");
+ } catch(BadLocationException ble) {
+ fail(ble.getMessage());
+ }
+ return this;
+ }
+
+ public void type(String text) throws BadLocationException {
+ for (int i = 0; i < text.length(); ++i) {
+ type(text.charAt(i));
+ }
+ }
+
+ public void type(char c) throws BadLocationException {
+ TestDocumentCommand command = new TestDocumentCommand(fCaretOffset, 0, new String(new char[] { c }));
+ customizeDocumentCommand(command);
+ fCaretOffset = command.exec(fDoc);
+ }
+
+ private void customizeDocumentCommand(TestDocumentCommand command) throws BadLocationException {
+ IAutoEditStrategy aes = getAutoEditStrategy(getContentType(command.offset));
+ if (aes != null) {
+ aes.customizeDocumentCommand(fDoc, command);
+ }
+ }
+
+ public void type(int offset, String text) throws BadLocationException {
+ fCaretOffset = offset;
+ type(text);
+ }
+
+ public void type(int offset, char c) throws BadLocationException {
+ fCaretOffset = offset;
+ type(c);
+ }
+
+ public void paste(String text) throws BadLocationException {
+ TestDocumentCommand command = new TestDocumentCommand(fCaretOffset, 0, text);
+ customizeDocumentCommand(command);
+ fCaretOffset = command.exec(fDoc);
+ }
+
+ public void paste(int offset, String text) throws BadLocationException {
+ fCaretOffset = offset;
+ paste(text);
+ }
+
+ public void backspace(int n) throws BadLocationException {
+ for (int i = 0; i < n; ++i) {
+ backspace();
+ }
+ }
+
+ public void backspace() throws BadLocationException {
+ TestDocumentCommand command = new TestDocumentCommand(fCaretOffset - 1, 1, ""); //$NON-NLS-1$
+ customizeDocumentCommand(command);
+ fCaretOffset = command.exec(fDoc);
+ }
+
+ public int getCaretOffset() {
+ return fCaretOffset;
+ }
+
+ public int setCaretOffset(int offset) {
+ fCaretOffset = offset;
+ if (fCaretOffset < 0)
+ fCaretOffset = 0;
+ else if (fCaretOffset > fDoc.getLength())
+ fCaretOffset = fDoc.getLength();
+ return fCaretOffset;
+ }
+
+ /**
+ * Moves caret right or left by the given number of characters.
+ *
+ * @param shift Move distance.
+ * @return New caret offset.
+ */
+ public int moveCaret(int shift) {
+ return setCaretOffset(fCaretOffset + shift);
+ }
+
+ public int goTo(int line) throws BadLocationException {
+ fCaretOffset = fDoc.getLineOffset(line);
+ return fCaretOffset;
+ }
+
+ public int goTo(int line, int column) throws BadLocationException {
+ if (column < 0 || column > fDoc.getLineLength(line)) {
+ throw new BadLocationException("No column " + column + " in line " + line); //$NON-NLS-1$ $NON-NLS-2$
+ }
+ fCaretOffset = fDoc.getLineOffset(line) + column;
+ return fCaretOffset;
+ }
+
+ public int getCaretLine() throws BadLocationException {
+ return fDoc.getLineOfOffset(fCaretOffset);
+ }
+
+ public int getCaretColumn() throws BadLocationException {
+ IRegion region = fDoc.getLineInformationOfOffset(fCaretOffset);
+ return fCaretOffset - region.getOffset();
+ }
+
+ public char getChar() throws BadLocationException {
+ return getChar(0);
+ }
+
+ public char getChar(int i) throws BadLocationException {
+ return fDoc.getChar(fCaretOffset+i);
+ }
+
+ public String getLine() throws BadLocationException {
+ return getLine(0);
+ }
+
+ public String getLine(int i) throws BadLocationException {
+ IRegion region = fDoc.getLineInformation(getCaretLine() + i);
+ return fDoc.get(region.getOffset(), region.getLength());
+ }
+
+ public String getContentType(int offset) throws BadLocationException {
+ return TextUtilities.getContentType(fDoc, fPartitioning, offset, true);
+ }
+ }
+
+ /**
+ * A DocumentCommand with public constructor and exec method.
+ */
+ protected static class TestDocumentCommand extends DocumentCommand {
+
+ public TestDocumentCommand(int offset, int length, String text) {
+ super();
+ doit = true;
+ this.text = text;
+
+ this.offset = offset;
+ this.length = length;
+
+ owner = null;
+ caretOffset = -1;
+ }
+
+ /**
+ * @param doc
+ * @return the new caret position.
+ * @throws BadLocationException
+ */
+ public int exec(IDocument doc) throws BadLocationException {
+ doc.replace(offset, length, text);
+ return caretOffset != -1 ?
+ caretOffset :
+ offset + (text == null ? 0 : text.length());
+ }
+ }
+
+ protected StringBuffer[] getTestContents() {
+ try {
+ return TestSourceReader.getContentsForTest(CTestPlugin.getDefault().getBundle(), "ui", this.getClass(), getName(), 2);
+ } catch(IOException ioe) {
+ fail(ioe.getMessage());
+ }
+ return null;
+ }
+
+ protected StringBuffer[] getTestContents1() {
+ try {
+ return TestSourceReader.getContentsForTest(CTestPlugin.getDefault().getBundle(), "ui", this.getClass(), getName(), 1);
+ } catch(IOException ioe) {
+ fail(ioe.getMessage());
+ }
+ return null;
+ }
+}
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java
index 8ab9167eeb9..cf9a40b6af6 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java
@@ -8,6 +8,7 @@
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
* Sergey Prigogin, Google
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
@@ -16,7 +17,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -26,214 +26,22 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.DocumentCommand;
-import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.TextUtilities;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.doctools.DefaultMultilineCommentAutoEditStrategy;
import org.eclipse.cdt.internal.formatter.DefaultCodeFormatterOptions;
import org.eclipse.cdt.internal.ui.text.CAutoIndentStrategy;
-import org.eclipse.cdt.internal.ui.text.CCommentAutoIndentStrategy;
import org.eclipse.cdt.internal.ui.text.CTextTools;
/**
* Testing the auto indent strategies.
*/
-public class CAutoIndentTest extends BaseTestCase {
-
- /**
- * Helper class to test the auto-edit strategies on a document.
- */
- static class AutoEditTester {
-
- private Map fStrategyMap = new HashMap();
- private IDocument fDoc;
- private String fPartitioning;
- private int fCaretOffset;
-
- public AutoEditTester(IDocument doc, String partitioning) {
- super();
- fDoc = doc;
- fPartitioning = partitioning;
- }
-
- public void setAutoEditStrategy(String contentType, IAutoEditStrategy aes) {
- fStrategyMap.put(contentType, aes);
- }
-
- public IAutoEditStrategy getAutoEditStrategy(String contentType) {
- return (IAutoEditStrategy)fStrategyMap.get(contentType);
- }
-
- /**
- * Empties the document, and returns the caret to the origin (0,0)
- */
- public void reset() {
- try {
- goTo(0,0);
- fDoc.set("");
- } catch(BadLocationException ble) {
- fail(ble.getMessage());
- }
- }
-
- public void type(String text) throws BadLocationException {
- for (int i = 0; i < text.length(); ++i) {
- type(text.charAt(i));
- }
- }
-
- public void type(char c) throws BadLocationException {
- TestDocumentCommand command = new TestDocumentCommand(fCaretOffset, 0, new String(new char[] { c }));
- customizeDocumentCommand(command);
- fCaretOffset = command.exec(fDoc);
- }
-
- private void customizeDocumentCommand(TestDocumentCommand command) throws BadLocationException {
- IAutoEditStrategy aes = getAutoEditStrategy(getContentType());
- if (aes != null) {
- aes.customizeDocumentCommand(fDoc, command);
- }
- }
-
- public void type(int offset, String text) throws BadLocationException {
- fCaretOffset = offset;
- type(text);
- }
-
- public void type(int offset, char c) throws BadLocationException {
- fCaretOffset = offset;
- type(c);
- }
-
- public void paste(String text) throws BadLocationException {
- TestDocumentCommand command = new TestDocumentCommand(fCaretOffset, 0, text);
- customizeDocumentCommand(command);
- fCaretOffset = command.exec(fDoc);
- }
-
- public void paste(int offset, String text) throws BadLocationException {
- fCaretOffset = offset;
- paste(text);
- }
-
- public void backspace(int n) throws BadLocationException {
- for (int i = 0; i < n; ++i) {
- backspace();
- }
- }
-
- public void backspace() throws BadLocationException {
- TestDocumentCommand command = new TestDocumentCommand(fCaretOffset - 1, 1, ""); //$NON-NLS-1$
- customizeDocumentCommand(command);
- fCaretOffset = command.exec(fDoc);
- }
-
- public int getCaretOffset() {
- return fCaretOffset;
- }
-
- public int setCaretOffset(int offset) {
- fCaretOffset = offset;
- if (fCaretOffset < 0)
- fCaretOffset = 0;
- else if (fCaretOffset > fDoc.getLength())
- fCaretOffset = fDoc.getLength();
- return fCaretOffset;
- }
-
- /**
- * Moves caret right or left by the given number of characters.
- *
- * @param shift Move distance.
- * @return New caret offset.
- */
- public int moveCaret(int shift) {
- return setCaretOffset(fCaretOffset + shift);
- }
-
- public int goTo(int line) throws BadLocationException {
- fCaretOffset = fDoc.getLineOffset(line);
- return fCaretOffset;
- }
-
- public int goTo(int line, int column) throws BadLocationException {
- if (column < 0 || column > fDoc.getLineLength(line)) {
- throw new BadLocationException("No column " + column + " in line " + line); //$NON-NLS-1$ $NON-NLS-2$
- }
- fCaretOffset = fDoc.getLineOffset(line) + column;
- return fCaretOffset;
- }
-
- public int getCaretLine() throws BadLocationException {
- return fDoc.getLineOfOffset(fCaretOffset);
- }
-
- public int getCaretColumn() throws BadLocationException {
- IRegion region = fDoc.getLineInformationOfOffset(fCaretOffset);
- return fCaretOffset - region.getOffset();
- }
-
- public char getChar() throws BadLocationException {
- return getChar(0);
- }
-
- public char getChar(int i) throws BadLocationException {
- return fDoc.getChar(fCaretOffset+i);
- }
-
- public String getLine() throws BadLocationException {
- return getLine(0);
- }
-
- public String getLine(int i) throws BadLocationException {
- IRegion region = fDoc.getLineInformation(getCaretLine() + i);
- return fDoc.get(region.getOffset(), region.getLength());
- }
-
- public String getContentType() throws BadLocationException {
- return getContentType(0);
- }
-
- public String getContentType(int i) throws BadLocationException {
- return TextUtilities.getContentType(fDoc, fPartitioning, fCaretOffset + i, false);
- }
- }
-
- /**
- * A DocumentCommand with public constructor and exec method.
- */
- static class TestDocumentCommand extends DocumentCommand {
-
- public TestDocumentCommand(int offset, int length, String text) {
- super();
- doit = true;
- this.text = text;
-
- this.offset = offset;
- this.length = length;
-
- owner = null;
- caretOffset = -1;
- }
-
- /**
- * Returns new caret position.
- */
- public int exec(IDocument doc) throws BadLocationException {
- doc.replace(offset, length, text);
- return caretOffset != -1 ?
- caretOffset :
- offset + (text == null ? 0 : text.length());
- }
- }
+public class CAutoIndentTest extends AbstractAutoEditTest {
private HashMap fOptions;
private List fStatusLog;
@@ -289,8 +97,9 @@ public class CAutoIndentTest extends BaseTestCase {
IDocument doc = new Document();
textTools.setupCDocument(doc);
AutoEditTester tester = new AutoEditTester(doc, ICPartitions.C_PARTITIONING);
+
tester.setAutoEditStrategy(IDocument.DEFAULT_CONTENT_TYPE, new CAutoIndentStrategy(ICPartitions.C_PARTITIONING, null));
- tester.setAutoEditStrategy(ICPartitions.C_MULTI_LINE_COMMENT, new CCommentAutoIndentStrategy());
+ tester.setAutoEditStrategy(ICPartitions.C_MULTI_LINE_COMMENT, new DefaultMultilineCommentAutoEditStrategy());
tester.setAutoEditStrategy(ICPartitions.C_PREPROCESSOR, new CAutoIndentStrategy(ICPartitions.C_PARTITIONING, null));
return tester;
}
@@ -385,7 +194,7 @@ public class CAutoIndentTest extends BaseTestCase {
public void testCCommentAutoIndent() throws BadLocationException {
AutoEditTester tester = createAutoEditTester(); //$NON-NLS-1$
tester.type("/*\n"); //$NON-NLS-1$
- assertEquals(ICPartitions.C_MULTI_LINE_COMMENT, tester.getContentType(-1));
+ assertEquals(ICPartitions.C_MULTI_LINE_COMMENT, tester.getContentType(tester.getCaretOffset()-1));
assertEquals(1, tester.getCaretLine());
assertEquals(3, tester.getCaretColumn());
assertEquals(" * ", tester.getLine()); //$NON-NLS-1$
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java
index 8a63d15d8a1..7ad9a314cdc 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CPartitionerTest.java
@@ -8,6 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
@@ -49,7 +50,7 @@ public class CPartitionerTest extends TestCase {
fTextTools= new CTextTools(new PreferenceStore());
fDocument= new Document();
- IDocumentPartitioner partitioner= fTextTools.createDocumentPartitioner();
+ IDocumentPartitioner partitioner= fTextTools.createDocumentPartitioner(null);
partitioner.connect(fDocument);
fDocument.setDocumentPartitioner(partitioner);
fDocument.set("xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx");
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
index 1d5eecde1a2..c5f7a2d684a 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2007, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
@@ -209,7 +210,7 @@ public class CodeFormatterTest extends BaseUITestCase {
//int verylooooooooooooooooooooooooooooooooooongname = 0000000000000000000000000000000;
- //int verylooooooooooooooooooooooooooooooooooongname =
+ //int verylooooooooooooooooooooooooooooooooooongname =
// 0000000000000000000000000000000;
public void testLineWrappingOfInitializerExpression_Bug200961() throws Exception {
assertFormatterResult();
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/DefaultCCommentAutoEditStrategyTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/DefaultCCommentAutoEditStrategyTest.java
new file mode 100644
index 00000000000..88bff2d97bc
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/DefaultCCommentAutoEditStrategyTest.java
@@ -0,0 +1,609 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 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:
+ * Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Sergey Prigogin, Google
+ * Andrew Ferguson (Symbian)
+ *******************************************************************************/
+
+package org.eclipse.cdt.ui.tests.text;
+
+import java.util.HashMap;
+
+import junit.framework.Test;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.testplugin.CProjectHelper;
+import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.doctools.DefaultMultilineCommentAutoEditStrategy;
+
+import org.eclipse.cdt.internal.ui.text.CAutoIndentStrategy;
+import org.eclipse.cdt.internal.ui.text.CTextTools;
+
+
+/**
+ * Testing the auto indent strategies.
+ */
+public class DefaultCCommentAutoEditStrategyTest extends AbstractAutoEditTest {
+ private HashMap fOptions;
+
+ /**
+ * @param name
+ */
+ public DefaultCCommentAutoEditStrategyTest(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+ return suite(DefaultCCommentAutoEditStrategyTest.class);
+ }
+
+ /*
+ * @see org.eclipse.cdt.core.testplugin.util.BaseTestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ fOptions= CCorePlugin.getOptions();
+ }
+
+ /*
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ CCorePlugin.setOptions(fOptions);
+ super.tearDown();
+ }
+
+ private AutoEditTester createAutoEditTester() {
+ CTextTools textTools = CUIPlugin.getDefault().getTextTools();
+ IDocument doc = new Document();
+ textTools.setupCDocument(doc);
+ AutoEditTester tester = new AutoEditTester(doc, ICPartitions.C_PARTITIONING);
+
+
+ tester.setAutoEditStrategy(IDocument.DEFAULT_CONTENT_TYPE, new CAutoIndentStrategy(ICPartitions.C_PARTITIONING, null));
+ tester.setAutoEditStrategy(ICPartitions.C_MULTI_LINE_COMMENT, new DefaultMultilineCommentAutoEditStrategy());
+ tester.setAutoEditStrategy(ICPartitions.C_PREPROCESSOR, new CAutoIndentStrategy(ICPartitions.C_PARTITIONING, null));
+ return tester;
+ }
+
+ public void testIsMultilineNew() throws BadLocationException {
+ DefaultMultilineCommentAutoEditStrategy ds= new DefaultMultilineCommentAutoEditStrategy();
+ CTextTools textTools = CUIPlugin.getDefault().getTextTools();
+ IDocument doc = new Document();
+ textTools.setupCDocument(doc);
+
+ doc.set(" /* ");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ assertTrue(ds.shouldCloseMultiline(doc, 5));
+ doc.set(" /* \n ");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ assertTrue(ds.shouldCloseMultiline(doc, 6));
+ doc.set(" /* */");
+ assertFalse(ds.shouldCloseMultiline(doc, 5));
+ doc.set(" /* */ ");
+ assertFalse(ds.shouldCloseMultiline(doc, 5));
+ doc.set(" /* \n\n */ ");
+ assertFalse(ds.shouldCloseMultiline(doc, 5));
+ doc.set(" /* \n\n */ \n /*");
+ assertTrue(ds.shouldCloseMultiline(doc, 14));
+ doc.set(" /* \n\n */ \n /* ");
+ assertTrue(ds.shouldCloseMultiline(doc, 14));
+ doc.set(" /* \n\n */ \n /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 14));
+ doc.set(" /* /* \n\n */ \n /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /* \n/* \n\n */ \n /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /* \n\n/* \n\n */ \n /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /* \n\n/* \n\n */ \n /* \n");
+ assertTrue(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /* \n\n */ /* \n\n */ \n /* \n");
+ assertFalse(ds.shouldCloseMultiline(doc, 3));
+ doc.set(" /*\n /*\n * \n * \n */\n");
+ assertFalse(ds.shouldCloseMultiline(doc, 8));
+ }
+
+ // /*X
+
+ // /*
+ // * X
+ // */
+ public void testInsertNewLine1() {
+ assertNewLineBehaviour();
+ }
+
+ // /*X
+
+ // /*
+ // * X
+ // */
+ public void testInsertNewLine2() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {}; /*X
+
+ // class A {}; /*
+ // X
+ public void testInsertNewLine3() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*X
+ // };
+
+ // class A {
+ // /*
+ // * X
+ // */
+ // };
+ public void testInsertNewLine4() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /* X
+ // };
+
+ // class A {
+ // /*
+ // * X
+ // */
+ // };
+ public void testInsertNewLine5() {
+ assertNewLineBehaviour();
+ }
+
+
+
+ // class A {
+ // /*X
+ // *
+ // */
+ // };
+
+ // class A {
+ // /*
+ // * X
+ // *
+ // */
+ // };
+ public void testInsertNewLine6() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*
+ // *X
+ // */
+ // };
+
+ // class A {
+ // /*
+ // *
+ // *X
+ // */
+ // };
+ public void testInsertNewLine7() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*
+ // *X
+ // */
+ // };
+
+ // class A {
+ // /*
+ // *
+ // *X
+ // */
+ // };
+ public void testInsertNewLine8() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*
+ // * abcd def ghiX
+ // */
+ // };
+
+ // class A {
+ // /*
+ // * abcd def ghi
+ // * X
+ // */
+ // };
+ public void testInsertNewLine9() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*
+ // * abcd deXf ghi
+ // */
+ // };
+
+ // class A {
+ // /*
+ // * abcd de
+ // * Xf ghi
+ // */
+ // };
+ public void testInsertNewLine10() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*
+ // *
+ // */X
+ // };
+
+ // class A {
+ // /*
+ // *
+ // */
+ // X
+ // };
+ public void _testInsertNewLine11() { // this is correct - we're not in a dccaes partition
+ assertNewLineBehaviour();
+ }
+
+ // /*X*/
+
+ // /*
+ // * X
+ // */
+ public void _testInsertNewLine12() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*Xfoo
+ // };
+
+ // class A {
+ // /*
+ // * X
+ // */foo
+ // };
+ public void testInsertNewLine13() {
+ assertNewLineBehaviour();
+ }
+
+ // class A {
+ // /*fooX
+ // };
+
+ // class A {
+ // /*foo
+ // * X
+ // */
+ // };
+ public void testInsertNewLine14() {
+ assertNewLineBehaviour();
+ }
+
+
+ // /*
+ // *
+ // *X
+
+ // /*
+ // *
+ // *
+ // *X
+ public void testInsertNewLine15() {
+ assertNewLineBehaviour();
+ }
+
+ // /*
+ // *
+ // *Xxx
+
+ // /*
+ // *
+ // *
+ // *Xxx
+ public void testInsertNewLine16() {
+ assertNewLineBehaviour();
+ }
+
+ // /*
+ // X
+
+ // /*
+ //
+ // X
+ public void testInsertNewLine17() {
+ assertNewLineBehaviour();
+ }
+
+ // /*
+ // X
+ // */
+
+ // /*
+ //
+ // X
+ // */
+ public void testInsertNewLine18() {
+ assertNewLineBehaviour();
+ }
+
+ // /*
+ // *
+ // */ /*X
+
+ // /*
+ // *
+ // */ /*
+ // * X
+ // */
+ public void _testInsertNewLine19() {
+ assertNewLineBehaviour();
+ }
+
+ // /*
+ // /*X
+ // *
+ // */
+
+ // /*
+ // /*
+ // * X
+ // *
+ // */
+ public void testInsertNewLine20() {
+ assertNewLineBehaviour();
+ }
+
+
+ //
+ // X
+ //
+ // void foo() {}
+ public void testFollowingDeclaration1() {
+ assertDeclarationFollowingX("void foo() {}");
+ }
+
+ // X
+ //
+ // void foo() {}
+ // void bar() {}
+ public void testFollowingDeclaration1b() {
+ assertDeclarationFollowingX("void foo() {}");
+ }
+
+
+ //
+ // X
+ // class C {
+ // void foo() {}
+ // };
+ public void testFollowingDeclaration2() {
+ assertDeclarationFollowingX("class C {\n void foo() {}\n };");
+ }
+
+ // class C {
+ // X
+ // void foo() {}
+ // };
+ public void testFollowingDeclaration3() {
+ assertDeclarationFollowingX("void foo() {}");
+ }
+
+ // class C {
+ // void foo() {X}
+ // void bar(int x);
+ // };
+ public void testFollowingDeclaration4() {
+ assertDeclarationFollowingX(null);
+ }
+
+ // class C {
+ // void foo() {} X
+ // void bar(int x);
+ // };
+ public void testFollowingDeclaration4a() {
+ assertDeclarationFollowingX("void bar(int x);");
+ }
+
+ // class C {
+ // void foo()X{}
+ // void bar(int x);
+ // };
+ public void _testFollowingDeclaration4b() { // XXX - this is likely invalid anyhow
+ assertDeclarationFollowingX("void foo(){}"); // (X is just the cursor position)
+ }
+
+ // class C {
+ // void foo()
+ // X
+ // {
+ // int x;
+ // }
+ // void bar(int x);
+ // };
+ public void _testFollowingDeclaration4c() { // XXX - this is likely invalid anyhow
+ assertDeclarationFollowingX("void foo()\n {\n int x;\n }\n"); // (X is just the cursor position)
+ }
+
+ // namespace n1 { X
+ // namespace n2 {
+ // void foo() {}
+ // void bar(int x) {}
+ // class C {
+ // int y;
+ // void baz(int x) {}
+ // };
+ // }
+ // }
+ public void _testFollowingDeclaration5() {
+ assertDeclarationFollowingX("namespace n2 {\n void foo() {}\n void bar(int x) {}\n class C {\n int y;\n void baz(int x) {}\n };\n }");
+ }
+
+ // namespace n1 {
+ // namespace n2 {X
+ // void foo() {}
+ // void bar(int x) {}
+ // class C {
+ // int y;
+ // void baz(int x) {}
+ // };
+ // }
+ // }
+ public void testFollowingDeclaration6() {
+ assertDeclarationFollowingX("void foo() {}");
+ }
+
+ // namespace n1 {
+ // namespace n2 {
+ // void foo() {}X
+ // void bar(int x) {}
+ // class C {
+ // int y;
+ // void baz(int x) {}
+ // };
+ // }
+ // }
+ public void testFollowingDeclaration7() {
+ assertDeclarationFollowingX("void bar(int x) {}");
+ }
+
+ // namespace n1 {
+ // namespace n2 {
+ // void foo() {}
+ // void bar(int x) {}
+ // class C {X
+ // int y;
+ // void baz(int x) {}
+ // };
+ // }
+ // }
+ public void testFollowingDeclaration8() {
+ assertDeclarationFollowingX("int y;");
+ }
+
+ // namespace n1 {
+ // namespace n2 {
+ // void foo() {}
+ // void bar(int x) {}
+ // class C {
+ // int y;X
+ // void baz(int x) {}
+ // };
+ // }
+ // }
+ public void testFollowingDeclaration9() {
+ assertDeclarationFollowingX("void baz(int x) {}");
+ }
+
+ // #define MM void foo()
+ // X
+ // MM {}
+ public void testFollowingDeclaration10() {
+ assertDeclarationFollowingX("MM {}");
+ }
+
+ // #define NAME foo
+ // #define MM(V) void V(int y)
+ // X
+ // MM(NAME) {}
+ public void testFollowingDeclaration11() {
+ assertDeclarationFollowingX("MM(NAME) {}");
+ }
+
+ // #define MAKEFUNC(V) void V()
+ // #define B(V) V
+ // #define C(V) foo ## x
+ // X
+ // MAKEFUNC(B(C(y))) {}
+ public void testFollowingDeclaration12() {
+ assertDeclarationFollowingX("MAKEFUNC(B(C(y))) {}");
+ }
+
+ /**
+ * @param rs - the raw signature of the declaration that should be returned
+ * or null
if no declaration should be returned.
+ */
+ protected void assertDeclarationFollowingX(String rs) {
+ try {
+ ICProject cproject= CProjectHelper.createCCProject("test"+System.currentTimeMillis(), "bin");
+ try {
+ String init= getTestContents1()[0].toString();
+ int caretInit= init.indexOf('X');
+ init= init.replaceFirst("X", "");
+ IFile file= TestSourceReader.createFile(cproject.getProject(), "this.cpp", init);
+ IASTTranslationUnit ast= TestSourceReader.createIndexBasedAST(null, cproject, file);
+ assertNotNull(ast);
+ IASTDeclaration decl= DefaultMultilineCommentAutoEditStrategy.findFollowingDeclaration(ast, caretInit);
+ if(rs!=null) {
+ assertNotNull(decl);
+ assertEquals(rs, decl.getRawSignature());
+ } else {
+ assertNull(decl);
+ }
+ } finally {
+ if(cproject!=null) {
+ cproject.getProject().delete(true, NPM);
+ }
+ }
+ } catch(CoreException ce) {
+ fail(ce.getMessage());
+ }
+ }
+
+ protected void assertNewLineBehaviour() {
+ DefaultMultilineCommentAutoEditStrategy ds= new DefaultMultilineCommentAutoEditStrategy();
+ CTextTools textTools = CUIPlugin.getDefault().getTextTools();
+ IDocument doc = new Document();
+ textTools.setupCDocument(doc);
+
+ StringBuffer[] raw= getTestContents();
+ String init= raw[0].toString(), expected= raw[1].toString();
+
+ int caretInit= init.indexOf('X');
+ init= init.replaceFirst("X", "");
+
+ int caretExpected= expected.indexOf('X');
+ expected= expected.replaceFirst("X", "");
+
+ doc.set(init);
+ int caretActual= -1;
+ try {
+ TestDocumentCommand dc= new TestDocumentCommand(caretInit, 0, "\n");
+ ds.customizeDocumentCommand(doc, dc);
+ caretActual= dc.exec(doc);
+ } catch(BadLocationException ble) {
+ fail(ble.getMessage());
+ }
+ String actual= doc.get();
+ assertEquals(expected, actual);
+ assertEquals(caretExpected, caretActual);
+ }
+}
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/PartitionTokenScannerTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/PartitionTokenScannerTest.java
index c4242948865..69fdae9f21d 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/PartitionTokenScannerTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/PartitionTokenScannerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2006 QNX Software Systems and others.
+ * Copyright (c) 2005, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
@@ -41,7 +42,7 @@ public class PartitionTokenScannerTest extends TestCase {
protected void setUp() {
fReference= new CPartitionScanner();
- fTestee= new FastCPartitionScanner(true);
+ fTestee= new FastCPartitionScanner(true, null);
}
// read sample C file
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java
index e19bb822035..42bcdbf6af5 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java
@@ -7,12 +7,15 @@
*
* Contributors:
* Markus Schorn - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
import junit.framework.TestSuite;
+import org.eclipse.cdt.ui.tests.text.doctools.DocCommentTestSuite;
+
public class TextTestSuite extends TestSuite {
public static TestSuite suite() {
@@ -22,6 +25,9 @@ public class TextTestSuite extends TestSuite {
public TextTestSuite() {
super(TextTestSuite.class.getName());
+ // documentation tool extension tests
+ addTest(DocCommentTestSuite.suite());
+
// partitioning tests
addTest(PartitionTokenScannerTest.suite());
addTest(CPartitionerTest.suite());
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/CommentOwnerManagerTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/CommentOwnerManagerTests.java
new file mode 100644
index 00000000000..d442d4af5e7
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/CommentOwnerManagerTests.java
@@ -0,0 +1,265 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.ui.tests.text.doctools;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.testplugin.CProjectHelper;
+import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+
+import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
+import org.eclipse.cdt.internal.ui.text.doctools.NullDocCommentOwner;
+
+/**
+ * Test comment ownership mapping
+ */
+public class CommentOwnerManagerTests extends BaseTestCase {
+ IDocCommentOwner OWNER_1;
+ IDocCommentOwner OWNER_2;
+ IDocCommentOwner OWNER_3;
+ DocCommentOwnerManager manager;
+
+ ICProject projectA, projectB, projectC;
+
+ protected void setUp() throws Exception {
+ manager= DocCommentOwnerManager.getInstance();
+
+ projectA= CProjectHelper.createCCProject("projectA", null);
+ projectB= CProjectHelper.createCCProject("projectB", null);
+ projectC= CProjectHelper.createCCProject("projectC", null);
+
+ IDocCommentOwner[] owners= manager.getRegisteredOwners();
+ OWNER_1= manager.getOwner("org.cdt.test.DCOM1");
+ OWNER_2= manager.getOwner("org.cdt.test.DCOM2");
+ OWNER_3= manager.getOwner("org.cdt.test.DCOM3");
+ }
+
+ protected void tearDown() throws Exception {
+ if(projectA != null) {
+ CProjectHelper.delete(projectA);
+ }
+ if(projectB != null) {
+ CProjectHelper.delete(projectB);
+ }
+ if(projectC != null) {
+ CProjectHelper.delete(projectC);
+ }
+ }
+
+ public static Test suite() {
+ return new TestSuite(CommentOwnerManagerTests.class);
+ }
+
+ public void testProjectLevel() throws Exception {
+ manager.setCommentOwner(projectA.getProject(), OWNER_3, true);
+ manager.setCommentOwner(projectB.getProject(), OWNER_2, true);
+ manager.setCommentOwner(projectC.getProject(), OWNER_1, true);
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setCommentOwner(projectA.getProject(), OWNER_2, true);
+ manager.setCommentOwner(projectB.getProject(), OWNER_1, true);
+ manager.setCommentOwner(projectC.getProject(), OWNER_3, true);
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ projectA.getProject().close(NPM);
+ projectB.getProject().close(NPM);
+ projectC.getProject().close(NPM);
+
+ projectA.getProject().open(NPM);
+ projectB.getProject().open(NPM);
+ projectC.getProject().open(NPM);
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+ }
+
+ public void testBoundaryConditions1() throws Exception {
+ DocCommentOwnerManager manager= DocCommentOwnerManager.getInstance();
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(null).getID());
+ }
+
+ public void testBoundaryConditions2() throws Exception {
+ try {
+ manager.setWorkspaceCommentOwner(null);
+ fail();
+ } catch(Exception e) {
+ // expected
+ }
+ }
+
+ public void testWorkspaceRootLevel() throws Exception {
+ manager.setCommentOwner(projectA.getProject(), null, true);
+ manager.setCommentOwner(projectB.getProject(), null, true);
+ manager.setCommentOwner(projectC.getProject(), null, true);
+
+ manager.setWorkspaceCommentOwner(OWNER_1);
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setWorkspaceCommentOwner(OWNER_2);
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setWorkspaceCommentOwner(OWNER_3);
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setCommentOwner(projectA.getProject(), OWNER_3, true);
+ manager.setCommentOwner(projectB.getProject(), OWNER_2, true);
+ manager.setCommentOwner(projectC.getProject(), OWNER_1, true);
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setWorkspaceCommentOwner(NullDocCommentOwner.INSTANCE);
+
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_3.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setCommentOwner(projectA.getProject(), null, true);
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setCommentOwner(projectC.getProject(), null, true);
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_2.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setCommentOwner(projectB.getProject(), null, true);
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(NullDocCommentOwner.INSTANCE.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+
+ manager.setWorkspaceCommentOwner(OWNER_1);
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectA.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectB.getProject().getFolder("foo/bar")).getID());
+
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject()).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFile("foo/bar/baz")).getID());
+ assertEquals(OWNER_1.getID(), manager.getCommentOwner(projectC.getProject().getFolder("foo/bar")).getID());
+ }
+}
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentHighlightingTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentHighlightingTest.java
new file mode 100644
index 00000000000..1397afb756a
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentHighlightingTest.java
@@ -0,0 +1,187 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.ui.tests.text.doctools;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.testplugin.CProjectHelper;
+import org.eclipse.cdt.ui.tests.BaseUITestCase;
+import org.eclipse.cdt.ui.tests.text.Accessor;
+import org.eclipse.cdt.ui.tests.text.EditorTestHelper;
+import org.eclipse.cdt.ui.tests.text.ResourceTestHelper;
+
+import org.eclipse.cdt.internal.ui.editor.CEditor;
+import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
+
+/**
+ *
+ */
+public class DocCommentHighlightingTest extends BaseUITestCase {
+ private static final DocCommentOwnerManager DCMAN= DocCommentOwnerManager.getInstance();
+ private static final String LINKED_FOLDER= "resources/docComments";
+ private static final String PROJECT= "DocCommentTests";
+
+ // ordered by occurrence
+ private static final int[] normal0= {114, 13};
+ private static final int[] comment1= {129, 18};
+ private static final int[] comment2= {149, 17};
+ private static final int[] comment3= {168, 16};
+ private static final int[] comment4= {184, 18};
+ private static final int[] comment5= {204, 19};
+ private static final int[] comment6= {223, 16};
+ private static final int[] comment7= {241, 17};
+ private static final int[] comment8= {258, 16};
+ private static final int[] comment9= {274, 17};
+ private static final int[] comment10= {293, 18};
+ private static final int[] snormal0= {315, 13};
+ private static final int[] scomment1= {328, 17};
+ private static final int[] scomment2= {345, 16};
+ private static final int[] scomment3= {361, 17};
+ private static final int[] scomment4= {378, 16};
+ private static final int[] scomment5= {394, 18};
+ private static final int[] comment11= {414, 18};
+ private static final int[] scomment6= {433, 16};
+ private static final int[] comment12= {449, 19};
+ private static final int[] scomment7= {469, 17};
+
+
+ private ICProject fCProject;
+ private final String fTestFilename= "/"+PROJECT+"/src/this.cpp";
+
+ private static SourceViewer fSourceViewer;
+
+ public static Test suite() {
+ return new TestSuite(DocCommentHighlightingTest.class);
+ }
+
+ public DocCommentHighlightingTest(String name) {
+ super(name);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ fCProject= EditorTestHelper.createCProject(PROJECT, LINKED_FOLDER);
+
+ AbstractTextEditor fEditor= (CEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(fTestFilename), true);
+ fSourceViewer= EditorTestHelper.getSourceViewer(fEditor);
+ assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100));
+ }
+
+ protected void tearDown () throws Exception {
+ EditorTestHelper.closeAllEditors();
+
+ if (fCProject != null)
+ CProjectHelper.delete(fCProject);
+
+ super.tearDown();
+ }
+
+ protected List/**/ findRangesColored(RGB rgb) {
+ List result= new ArrayList();
+ IEditorPart p= get();
+ ISourceViewer vw= ((CEditor)p).getViewer();
+ Accessor a= new Accessor(vw, TextViewer.class);
+ StyledText st= (StyledText) a.get("fTextWidget");
+ StyleRange[] rgs= st.getStyleRanges();
+ for(int i=0; i*/ mkPositions(int[][] raw) {
+ List result= new ArrayList();
+ for(int i=0; i*/ expected= mkPositions(new int[][] {comment1, scomment1});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+
+ public void testDCOM_B() throws BadLocationException, InterruptedException {
+ DCMAN.setCommentOwner(fCProject.getProject(), DCMAN.getOwner("org.cdt.test.ownerB"), true);
+ runEventQueue(1000);
+ List/**/ expected= mkPositions(new int[][] {comment2, scomment2});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+
+ public void testDCOM_C() throws BadLocationException, InterruptedException {
+ DCMAN.setCommentOwner(fCProject.getProject(), DCMAN.getOwner("org.cdt.test.ownerC"), true);
+ runEventQueue(1000);
+ List/**/ expected= mkPositions(new int[][] {comment3, scomment3});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+
+ public void testDCOM_ABC() throws BadLocationException, InterruptedException {
+ DCMAN.setCommentOwner(fCProject.getProject(), DCMAN.getOwner("org.cdt.test.ownerABC"), true);
+ runEventQueue(1000);
+ List/**/ expected= mkPositions(new int[][] {comment1, comment2, comment3, scomment1, scomment2, scomment3});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+
+ public void testDCOM_BDFG() throws BadLocationException, InterruptedException {
+ DCMAN.setCommentOwner(fCProject.getProject(), DCMAN.getOwner("org.cdt.test.ownerBDFG"), true);
+ runEventQueue(1000);
+ List/**/ expected= mkPositions(new int[][] {comment2, comment4, comment6, comment7, comment8, scomment2});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+
+ public void testDCOM_PUNC() throws BadLocationException, InterruptedException {
+ DCMAN.setCommentOwner(fCProject.getProject(), DCMAN.getOwner("org.cdt.test.ownerPUNC"), true);
+ runEventQueue(1000);
+ List/**/ expected= mkPositions(new int[][] {comment9, comment10, scomment4, scomment5, comment11, comment12, scomment7});
+ assertEquals(expected, findRangesColored(TestGenericTagConfiguration.DEFAULTRGB));
+ }
+}
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentTestSuite.java
new file mode 100644
index 00000000000..651f431cdca
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/DocCommentTestSuite.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.ui.tests.text.doctools;
+
+import org.eclipse.cdt.ui.tests.text.doctools.doxygen.DoxygenCCommentAutoEditStrategyTest;
+
+import junit.framework.TestSuite;
+
+public class DocCommentTestSuite extends TestSuite {
+
+ public static TestSuite suite() {
+ return new DocCommentTestSuite();
+ }
+
+ public DocCommentTestSuite() {
+ super(DocCommentTestSuite.class.getName());
+
+ addTest(CommentOwnerManagerTests.suite());
+ addTest(DocCommentHighlightingTest.suite());
+ addTest(DoxygenCCommentAutoEditStrategyTest.suite());
+ }
+}
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/TestGenericTagConfiguration.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/TestGenericTagConfiguration.java
new file mode 100644
index 00000000000..bfde81e1d3d
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/TestGenericTagConfiguration.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.ui.tests.text.doctools;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IAutoEditStrategy;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.RGB;
+
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.text.doctools.generic.AbstractGenericTagDocCommentViewerConfiguration;
+import org.eclipse.cdt.ui.text.doctools.generic.GenericDocTag;
+
+public class TestGenericTagConfiguration extends AbstractGenericTagDocCommentViewerConfiguration {
+ public static final RGB DEFAULTRGB= new RGB(63, 95, 191);
+
+ protected char[] fCommentMarkers;
+
+ public TestGenericTagConfiguration(String commentMarkers, String tags, String tagMarkers, String defaultToken, String tagToken) {
+ super(mkTags(tags.split("(\\s)*,(\\s)*")), tagMarkers.toCharArray(), defaultToken, tagToken);
+ IPreferenceStore cuis= CUIPlugin.getDefault().getPreferenceStore();
+ PreferenceConverter.setDefault(cuis, defaultToken, DEFAULTRGB);
+ PreferenceConverter.setDefault(cuis, tagToken, new RGB(127, 159, 191));
+ fCommentMarkers= commentMarkers.toCharArray();
+ }
+
+ public IAutoEditStrategy createAutoEditStrategy() {
+ return null;
+ }
+
+ private static GenericDocTag[] mkTags(String[] tagNames) {
+ GenericDocTag[] tags= new GenericDocTag[tagNames.length];
+ for(int i=0; i
+
@@ -770,6 +771,11 @@
class="org.eclipse.cdt.internal.ui.preferences.WorkInProgressPreferencePage"
id="org.eclipse.cdt.ui.preferneces.WorkInProgressPreferencePage">
+
@@ -1944,7 +1950,11 @@
point="org.eclipse.core.runtime.preferences">
-
+
+
+
+
@@ -2447,16 +2457,6 @@
name="%exportWizard.CDTCategory.name">
-
-
-
-
-
+
+
-
+
+
+
+
+
diff --git a/core/org.eclipse.cdt.ui/schema/DocCommentOwner.exsd b/core/org.eclipse.cdt.ui/schema/DocCommentOwner.exsd
new file mode 100644
index 00000000000..65ccf71d49a
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/schema/DocCommentOwner.exsd
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+ This extension point allows contribution of document comment detection, presentation and editing behaviours to the CDT editor.<p>
+
+Where C and C++ define single and multiline comments, there is no corresponding language level definition of distinguished comments recognized by documentation tools. A list of these is available here: <a href="http://en.wikipedia.org/wiki/Comparison_of_documentation_generators">Wikipedia Comparison of Documentation Generators</a><p>
+
+The customization for single and multi-line comments is handled by two contributed implementations of the same interface <ul><li><code>org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration</code></ul>
+The javadoc for this interface describes the individual editor features that can be contributed.<p>
+
+A level of understanding of the eclipse and CDT editor infrastructure is needed in order to contribute to this extension point. A good starting point is to look at the GenericDocTag classes in the package - see the API Information section below.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ a globally unique ID representing this owner.
+
+
+
+
+
+
+ a human readable name for the CDT UI
+
+
+
+
+
+
+
+
+
+ The comment viewer configuration that should be used for detection, presentation and editing of C/C++ multiline comments
+
+
+
+
+
+
+
+
+
+ The comment viewer configuration that should be used for detection, presentation and editing of C/C++ singleline comments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5.0
+
+
+
+
+
+
+
+
+ <pre>
+<extension
+ point="org.eclipse.cdt.ui.DocCommentOwner">
+ <owner
+ id="org.eclipse.cdt.ui.doxygen"
+ name="Doxygen"
+ multiline="org.eclipse.cdt.ui.text.doctools.doxygen.DoxygenMultilineConfiguration"
+ singleline="org.eclipse.cdt.ui.text.doctools.doxygen.DoxygenSingleConfiguration">
+ </owner>
+</extension>
+</pre>
+
+
+
+
+
+
+
+
+ <br>
+The javadoc is considered the primary source of information for plug-in implementors. Only a light outline is given here<p>
+Key interfaces are:
+<ul>
+<li>org.eclipse.cdt.ui.text.doctools.IDocCommentOwner
+<li>org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration
+<li>org.eclipse.cdt.ui.text.doctools.IDocCommentOwnershipListener
+</ul>
+
+Key implementations are:
+<ul>
+<li>the implementations in package org.eclipse.cdt.ui.text.doctools.generic
+</ul>
+
+
+
+
+
+
+
+
+
+ An abstract implementation of some key interfaces is given in the package <code>org.eclipse.cdt.ui.text.doctools.generic</code>
+
+
+
+
+
+
+
+
+ Copyright (c) 2008 Symbian 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
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+
+
+
+
diff --git a/core/org.eclipse.cdt.ui/schema/completionProposalComputer.exsd b/core/org.eclipse.cdt.ui/schema/completionProposalComputer.exsd
index 68cfad9734c..22fd3357462 100644
--- a/core/org.eclipse.cdt.ui/schema/completionProposalComputer.exsd
+++ b/core/org.eclipse.cdt.ui/schema/completionProposalComputer.exsd
@@ -115,6 +115,10 @@ and must have a public 0-argument constructor.
+
+
+
+
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/AbstractMergeViewer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/AbstractMergeViewer.java
index 068fa9db04e..70447815a25 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/AbstractMergeViewer.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/AbstractMergeViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2007, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.compare;
@@ -134,7 +135,7 @@ abstract class AbstractMergeViewer extends TextMergeViewer {
}
protected IDocumentPartitioner getDocumentPartitioner() {
- return CUIPlugin.getDefault().getTextTools().createDocumentPartitioner();
+ return CUIPlugin.getDefault().getTextTools().createDocumentPartitioner(null);
}
protected void configureTextViewer(TextViewer textViewer) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java
index 251977a7c20..94d5d6f960d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java
@@ -9,6 +9,7 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.compare;
@@ -160,7 +161,7 @@ public class CStructureCreator extends StructureCreator {
* @see org.eclipse.compare.structuremergeviewer.StructureCreator#getDocumentPartitioner()
*/
protected IDocumentPartitioner getDocumentPartitioner() {
- return CUIPlugin.getDefault().getTextTools().createDocumentPartitioner();
+ return CUIPlugin.getDefault().getTextTools().createDocumentPartitioner(null);
}
private static String readString(IStreamContentAccessor sa) throws CoreException {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentSetupParticipant.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentSetupParticipant.java
index b7f77787957..bf0b7b9f32b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentSetupParticipant.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentSetupParticipant.java
@@ -1,25 +1,31 @@
/*******************************************************************************
- * Copyright (c) 2002, 2006 QNX Software Systems and others.
+ * Copyright (c) 2002, 2008 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:
- * QNX Software Systems - Initial API and implementation
+ * QNX Software Systems - Initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor;
-import org.eclipse.cdt.internal.ui.text.CTextTools;
-import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
+import org.eclipse.core.filebuffers.IDocumentSetupParticipantExtension;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.text.IDocument;
+import org.eclipse.cdt.ui.CUIPlugin;
+
+import org.eclipse.cdt.internal.ui.text.CTextTools;
+
/**
* CDocumentSetupParticipant
*/
-public class CDocumentSetupParticipant implements IDocumentSetupParticipant {
+public class CDocumentSetupParticipant implements IDocumentSetupParticipant, IDocumentSetupParticipantExtension {
/**
*
*/
@@ -30,8 +36,14 @@ public class CDocumentSetupParticipant implements IDocumentSetupParticipant {
* @see org.eclipse.core.filebuffers.IDocumentSetupParticipant#setup(org.eclipse.jface.text.IDocument)
*/
public void setup(IDocument document) {
- CTextTools tools= CUIPlugin.getDefault().getTextTools();
- tools.setupCDocument(document);
+ setup(document, null, null);
+ }
+
+ /*
+ * @see org.eclipse.core.filebuffers.IDocumentSetupParticipantExtension#setup(org.eclipse.jface.text.IDocument, org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.LocationKind)
+ */
+ public void setup(IDocument document, IPath location, LocationKind locationKind) {
+ CTextTools tools= CUIPlugin.getDefault().getTextTools();
+ tools.setupCDocument(document, location, locationKind);
}
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmCodeScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmCodeScanner.java
index 32c40357b54..649a4c4ca29 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmCodeScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmCodeScanner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 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
@@ -9,30 +9,29 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor.asm;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordPatternRule;
import org.eclipse.jface.text.rules.WordRule;
-import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.cdt.core.model.IAsmLanguage;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.AbstractCScanner;
import org.eclipse.cdt.internal.ui.text.ICColorConstants;
-import org.eclipse.cdt.internal.ui.text.IColorManager;
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
-/**
+/*
* An assembly code scanner.
*/
public final class AsmCodeScanner extends AbstractCScanner {
@@ -50,27 +49,15 @@ public final class AsmCodeScanner extends AbstractCScanner {
/**
* Creates an assembly code scanner.
*/
- public AsmCodeScanner(IColorManager manager, IPreferenceStore store, IAsmLanguage asmLanguage) {
- super(manager, store);
+ public AsmCodeScanner(ITokenStoreFactory factory, IAsmLanguage asmLanguage) {
+ super(factory.createTokenStore(fgTokenProperties));
fAsmLanguage= asmLanguage;
- initialize();
- }
-
- /*
- * @see AbstractCScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fgTokenProperties;
+ setRules(createRules());
}
- /*
- * @see AbstractCScanner#createRules()
- */
- protected List createRules() {
-
- List rules= new ArrayList();
-
- Token token;
+ protected List createRules() {
+ IToken token;
+ List rules= new ArrayList();
// Add rule(s) for single line comments
token= getToken(ICColorConstants.C_SINGLE_LINE_COMMENT);
@@ -82,7 +69,7 @@ public final class AsmCodeScanner extends AbstractCScanner {
// Add generic whitespace rule.
rules.add(new WhitespaceRule(new CWhitespaceDetector()));
- final Token other= getToken(ICColorConstants.C_DEFAULT);
+ final IToken other= getToken(ICColorConstants.C_DEFAULT);
// Add rule for labels
token= getToken(ICColorConstants.ASM_LABEL);
@@ -105,13 +92,4 @@ public final class AsmCodeScanner extends AbstractCScanner {
setDefaultReturnToken(other);
return rules;
}
-
- /*
- * @see AbstractCScanner#adaptToPreferenceChange(PropertyChangeEvent)
- */
- public void adaptToPreferenceChange(PropertyChangeEvent event) {
- if (super.affectsBehavior(event)) {
- super.adaptToPreferenceChange(event);
- }
- }
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmPreprocessorScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmPreprocessorScanner.java
index a961b821d6e..019b8e3ff47 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmPreprocessorScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmPreprocessorScanner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2006, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor.asm;
@@ -14,18 +15,17 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.cdt.core.model.IAsmLanguage;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.AbstractCScanner;
import org.eclipse.cdt.internal.ui.text.CHeaderRule;
import org.eclipse.cdt.internal.ui.text.ICColorConstants;
-import org.eclipse.cdt.internal.ui.text.IColorManager;
import org.eclipse.cdt.internal.ui.text.PreprocessorRule;
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
@@ -37,12 +37,12 @@ import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
*/
public class AsmPreprocessorScanner extends AbstractCScanner {
- /** Properties for tokens. */
+ /** Properties for tokens. */
private static final String[] fgTokenProperties= {
ICColorConstants.C_SINGLE_LINE_COMMENT,
ICColorConstants.PP_DIRECTIVE,
ICColorConstants.C_STRING,
- ICColorConstants.PP_HEADER,
+ ICColorConstants.PP_HEADER,
ICColorConstants.PP_DEFAULT,
};
@@ -50,31 +50,27 @@ public class AsmPreprocessorScanner extends AbstractCScanner {
/**
* Create a preprocessor directive scanner.
- *
- * @param colorManager
- * @param store
+ * @param factory
* @param asmLanguage
*/
- public AsmPreprocessorScanner(IColorManager colorManager, IPreferenceStore store, IAsmLanguage asmLanguage) {
- super(colorManager, store);
+ public AsmPreprocessorScanner(ITokenStoreFactory factory, IAsmLanguage asmLanguage) {
+ super(factory.createTokenStore(fgTokenProperties));
Assert.isNotNull(asmLanguage);
fAsmLanguage= asmLanguage;
- initialize();
+ setRules(createRules());
}
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractCScanner#createRules()
+ /**
+ * Creates rules used in this RulesBasedScanner
*/
- protected List createRules() {
+ protected List createRules() {
+ List rules= new ArrayList();
+ IToken defaultToken= getToken(ICColorConstants.PP_DEFAULT);
+ IToken token;
- Token defaultToken= getToken(ICColorConstants.PP_DEFAULT);
-
- List rules= new ArrayList();
- Token token;
-
// Add generic white space rule.
rules.add(new WhitespaceRule(new CWhitespaceDetector()));
-
+
token= getToken(ICColorConstants.PP_DIRECTIVE);
PreprocessorRule preprocessorRule= new PreprocessorRule(new CWordDetector(), defaultToken, getToken(ICColorConstants.C_SINGLE_LINE_COMMENT));
String[] ppKeywords= fAsmLanguage.getPreprocessorKeywords();
@@ -88,27 +84,19 @@ public class AsmPreprocessorScanner extends AbstractCScanner {
preprocessorRule.addWord("##", token); //$NON-NLS-1$
rules.add(preprocessorRule);
- token = getToken(ICColorConstants.PP_HEADER);
- CHeaderRule headerRule = new CHeaderRule(token);
- rules.add(headerRule);
+ token = getToken(ICColorConstants.PP_HEADER);
+ CHeaderRule headerRule = new CHeaderRule(token);
+ rules.add(headerRule);
- token = getToken(ICColorConstants.C_SINGLE_LINE_COMMENT);
- IRule lineCommentRule= new EndOfLineRule("#", token); //$NON-NLS-1$
- rules.add(lineCommentRule);
+ token = getToken(ICColorConstants.C_SINGLE_LINE_COMMENT);
+ IRule lineCommentRule= new EndOfLineRule("#", token); //$NON-NLS-1$
+ rules.add(lineCommentRule);
-// token = getToken(ICColorConstants.C_MULTI_LINE_COMMENT);
-// IRule blockCommentRule = new MultiLineRule("/*", "*/", token, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
-// rules.add(blockCommentRule);
-
- setDefaultReturnToken(defaultToken);
+ // token = getToken(ICColorConstants.C_MULTI_LINE_COMMENT);
+ // IRule blockCommentRule = new MultiLineRule("/*", "*/", token, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
+ // rules.add(blockCommentRule);
+
+ setDefaultReturnToken(defaultToken);
return rules;
}
-
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractCScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fgTokenProperties;
- }
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmSourceViewerConfiguration.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmSourceViewerConfiguration.java
index 138b31b4dc4..28c4408415f 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmSourceViewerConfiguration.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 QNX Software Systems and others.
+ * Copyright (c) 2000, 2008 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
@@ -44,6 +44,8 @@ import org.eclipse.cdt.core.model.LanguageManager;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.ILanguageUI;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.ITokenStore;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.AbstractCScanner;
import org.eclipse.cdt.internal.ui.text.CCommentScanner;
@@ -52,6 +54,7 @@ import org.eclipse.cdt.internal.ui.text.ICColorConstants;
import org.eclipse.cdt.internal.ui.text.IColorManager;
import org.eclipse.cdt.internal.ui.text.PartitionDamager;
import org.eclipse.cdt.internal.ui.text.SingleTokenCScanner;
+import org.eclipse.cdt.internal.ui.text.TokenStore;
public class AsmSourceViewerConfiguration extends TextSourceViewerConfiguration {
@@ -123,9 +126,9 @@ public class AsmSourceViewerConfiguration extends TextSourceViewerConfiguration
* Initializes the scanners.
*/
private void initializeScanners() {
- fMultilineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_MULTI_LINE_COMMENT);
- fSinglelineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
- fStringScanner= new SingleTokenCScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_STRING);
+ fMultilineCommentScanner= new CCommentScanner(getTokenStoreFactory(), ICColorConstants.C_MULTI_LINE_COMMENT);
+ fSinglelineCommentScanner= new CCommentScanner(getTokenStoreFactory(), ICColorConstants.C_SINGLE_LINE_COMMENT);
+ fStringScanner= new SingleTokenCScanner(getTokenStoreFactory(), ICColorConstants.C_STRING);
}
/**
@@ -167,10 +170,10 @@ public class AsmSourceViewerConfiguration extends TextSourceViewerConfiguration
}
AbstractCScanner scanner= null;
if (language instanceof IAsmLanguage) {
- scanner= new AsmPreprocessorScanner(getColorManager(), fPreferenceStore, (IAsmLanguage)language);
+ scanner= new AsmPreprocessorScanner(getTokenStoreFactory(), (IAsmLanguage)language);
}
if (scanner == null) {
- scanner= new AsmPreprocessorScanner(getColorManager(), fPreferenceStore, AssemblyLanguage.getDefault());
+ scanner= new AsmPreprocessorScanner(getTokenStoreFactory(), AssemblyLanguage.getDefault());
}
fPreprocessorScanner= scanner;
return fPreprocessorScanner;
@@ -187,14 +190,14 @@ public class AsmSourceViewerConfiguration extends TextSourceViewerConfiguration
RuleBasedScanner scanner= null;
if (language instanceof IAsmLanguage) {
IAsmLanguage asmLang= (IAsmLanguage)language;
- scanner = new AsmCodeScanner(getColorManager(), fPreferenceStore, asmLang);
+ scanner = new AsmCodeScanner(getTokenStoreFactory(), asmLang);
} else if (language != null) {
ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class);
if (languageUI != null)
scanner = languageUI.getCodeScanner();
}
if (scanner == null) {
- scanner = new AsmCodeScanner(getColorManager(), fPreferenceStore, AssemblyLanguage.getDefault());
+ scanner = new AsmCodeScanner(getTokenStoreFactory(), AssemblyLanguage.getDefault());
}
if (scanner instanceof AbstractCScanner) {
fCodeScanner= (AbstractCScanner)scanner;
@@ -373,6 +376,13 @@ public class AsmSourceViewerConfiguration extends TextSourceViewerConfiguration
fPreprocessorScanner= null;
}
+ private ITokenStoreFactory getTokenStoreFactory() {
+ return new ITokenStoreFactory() {
+ public ITokenStore createTokenStore(String[] propertyColorNames) {
+ return new TokenStore(getColorManager(), fPreferenceStore, propertyColorNames);
+ }
+ };
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmTextTools.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmTextTools.java
index a7163810f86..da97711174a 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmTextTools.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/asm/AsmTextTools.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 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
@@ -9,6 +9,7 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Wind River Systems, Inc.
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor.asm;
@@ -20,11 +21,13 @@ import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.cdt.core.model.AssemblyLanguage;
import org.eclipse.cdt.ui.CUIPlugin;
-
+import org.eclipse.cdt.ui.text.ITokenStore;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.CCommentScanner;
import org.eclipse.cdt.internal.ui.text.ICColorConstants;
import org.eclipse.cdt.internal.ui.text.SingleTokenCScanner;
+import org.eclipse.cdt.internal.ui.text.TokenStore;
import org.eclipse.cdt.internal.ui.text.util.CColorManager;
@@ -77,20 +80,23 @@ public class AsmTextTools {
* and initializes all members of this collection.
*/
public AsmTextTools(IPreferenceStore store, Preferences coreStore) {
- if(store == null) {
- store = CUIPlugin.getDefault().getPreferenceStore();
- }
-
- fColorManager= new CColorManager();
- fCodeScanner= new AsmCodeScanner(fColorManager, store, AssemblyLanguage.getDefault());
- fPreprocessorScanner= new AsmPreprocessorScanner(fColorManager, store, AssemblyLanguage.getDefault());
+ fPreferenceStore = store != null ? store : CUIPlugin.getDefault().getPreferenceStore();
+ fColorManager= new CColorManager();
+
+ ITokenStoreFactory factory= new ITokenStoreFactory() {
+ public ITokenStore createTokenStore(String[] propertyColorNames) {
+ return new TokenStore(fColorManager, fPreferenceStore, propertyColorNames);
+ }
+ };
- fMultilineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_MULTI_LINE_COMMENT);
- fSinglelineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
- fStringScanner= new SingleTokenCScanner(fColorManager, store, ICColorConstants.C_STRING);
+ fCodeScanner= new AsmCodeScanner(factory, AssemblyLanguage.getDefault());
+ fPreprocessorScanner= new AsmPreprocessorScanner(factory, AssemblyLanguage.getDefault());
+ fMultilineCommentScanner= new CCommentScanner(factory, coreStore, ICColorConstants.C_MULTI_LINE_COMMENT);
+ fSinglelineCommentScanner= new CCommentScanner(factory, coreStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
+ fStringScanner= new SingleTokenCScanner(factory, ICColorConstants.C_STRING);
- fPreferenceStore = store;
- store.addPropertyChangeListener(fPreferenceListener);
+ // listener must be registered after initializing scanners
+ fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
fCorePreferenceStore= coreStore;
if (fCorePreferenceStore != null) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorColoringConfigurationBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorColoringConfigurationBlock.java
index 8060e85a0bb..7036322dd2f 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorColoringConfigurationBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorColoringConfigurationBlock.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -7,7 +7,8 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
- * Anton Leherbauer (Wind River Systems)
+ * Anton Leherbauer (Wind River Systems
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
@@ -17,6 +18,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.ColorSelector;
@@ -341,7 +343,7 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
/**
* Highlighting color list
*/
- private final java.util.List fListModel= new ArrayList();
+ private final java.util.List fListModel= new ArrayList();
/**
* Highlighting color list viewer
*/
@@ -394,13 +396,12 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
}
private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
-
- ArrayList overlayKeys= new ArrayList();
+ List overlayKeys= new ArrayList();
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_ENABLED));
for (int i= 0, n= fListModel.size(); i < n; i++) {
- HighlightingColorListItem item= (HighlightingColorListItem) fListModel.get(i);
+ HighlightingColorListItem item= fListModel.get(i);
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, item.getColorKey()));
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, item.getBoldKey()));
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, item.getItalicKey()));
@@ -788,7 +789,6 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
}
private Control createPreviewer(Composite parent) {
-
IPreferenceStore generalTextStore= EditorsUI.getPreferenceStore();
IPreferenceStore store= new ChainedPreferenceStore(new IPreferenceStore[] { getPreferenceStore(), generalTextStore });
fPreviewViewer = new CSourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER, store);
@@ -801,7 +801,7 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
String content= loadPreviewContentFromFile("ColorSettingPreviewCode.txt"); //$NON-NLS-1$
IDocument document= new Document(content);
- CUIPlugin.getDefault().getTextTools().setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING);
+ CUIPlugin.getDefault().getTextTools().setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING, null);
fPreviewViewer.setDocument(document);
installSemanticHighlighting();
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java
index 2fe1aee6c92..e9158895a21 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 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
@@ -9,11 +9,13 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
import java.util.ArrayList;
+import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.ColorSelector;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
@@ -37,10 +39,15 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.cdt.ui.dialogs.DocCommentOwnerComposite;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.editor.CEditor;
+import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
+import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
/*
* The page for setting the editor options.
@@ -60,14 +67,14 @@ public class CEditorPreferencePage extends AbstractPreferencePage implements IWo
private List fAppearanceColorList;
private ColorSelector fAppearanceColorEditor;
private Button fAppearanceColorDefault;
-
-
+ private DocCommentOwnerComposite fDocCommentOwnerComposite;
+
public CEditorPreferencePage() {
super();
}
protected OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
- ArrayList overlayKeys = new ArrayList();
+ ArrayList overlayKeys = new ArrayList();
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.SUB_WORD_NAVIGATION));
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.MATCHING_BRACKETS_COLOR));
@@ -117,8 +124,8 @@ public class CEditorPreferencePage extends AbstractPreferencePage implements IWo
}
private Control createAppearancePage(Composite parent) {
-
- Composite behaviorComposite = new Composite(parent, SWT.NONE);
+ Composite behaviorComposite= ControlFactory.createGroup(parent, PreferencesMessages.CEditorPreferencePage_GeneralAppearanceGroupTitle, 1);
+
GridLayout layout = new GridLayout();
layout.numColumns = 2;
behaviorComposite.setLayout(layout);
@@ -269,8 +276,17 @@ public class CEditorPreferencePage extends AbstractPreferencePage implements IWo
createHeader(parent);
+ ControlFactory.createEmptySpace(parent, 2);
createAppearancePage(parent);
+ ControlFactory.createEmptySpace(parent, 2);
+
+ String dsc= PreferencesMessages.CEditorPreferencePage_SelectDocToolDescription;
+ String msg= PreferencesMessages.CEditorPreferencePage_WorkspaceDefaultLabel;
+ IDocCommentOwner workspaceOwner= DocCommentOwnerManager.getInstance().getWorkspaceCommentOwner();
+ fDocCommentOwnerComposite= new DocCommentOwnerComposite(parent, workspaceOwner, dsc, msg);
+ fDocCommentOwnerComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true,false).create());
+
initialize();
return parent;
@@ -291,6 +307,14 @@ public class CEditorPreferencePage extends AbstractPreferencePage implements IWo
});
}
+ /*
+ * @see org.eclipse.cdt.internal.ui.preferences.AbstractPreferencePage#performOk()
+ */
+ public boolean performOk() {
+ DocCommentOwnerManager.getInstance().setWorkspaceCommentOwner(fDocCommentOwnerComposite.getSelectedDocCommentOwner());
+ return super.performOk();
+ }
+
/**
* Initializes the default colors.
*/
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeTemplateBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeTemplateBlock.java
index afbf58a2d7c..bdca19f73fc 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeTemplateBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeTemplateBlock.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -8,6 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
@@ -409,7 +410,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
IDocument document= new Document();
CTextTools tools= CUIPlugin.getDefault().getTextTools();
- tools.setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING);
+ tools.setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING, null);
IPreferenceStore store= CUIPlugin.getDefault().getCombinedPreferenceStore();
SourceViewer viewer= new CSourceViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL, store);
CodeTemplateSourceViewerConfiguration configuration= new CodeTemplateSourceViewerConfiguration(tools.getColorManager(), store, null, fTemplateProcessor);
@@ -442,7 +443,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
}
protected TemplatePersistenceData[] getCodeTemplatesOfCategory(boolean isComment) {
- ArrayList res= new ArrayList();
+ ArrayList res= new ArrayList();
TemplatePersistenceData[] templates= fTemplateStore.getTemplateData();
for (int i= 0; i < templates.length; i++) {
TemplatePersistenceData curr= templates[i];
@@ -452,7 +453,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
res.add(curr);
}
}
- return (TemplatePersistenceData[]) res.toArray(new TemplatePersistenceData[res.size()]);
+ return res.toArray(new TemplatePersistenceData[res.size()]);
}
private TemplatePersistenceData[] getTemplatesOfContextType(TemplateContextType contextType) {
@@ -460,7 +461,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
}
protected TemplatePersistenceData[] getTemplatesOfContextType(String contextTypeId) {
- ArrayList res= new ArrayList();
+ ArrayList res= new ArrayList();
TemplatePersistenceData[] templates= fTemplateStore.getTemplateData();
for (int i= 0; i < templates.length; i++) {
TemplatePersistenceData curr= templates[i];
@@ -468,7 +469,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
res.add(curr);
}
}
- return (TemplatePersistenceData[]) res.toArray(new TemplatePersistenceData[res.size()]);
+ return res.toArray(new TemplatePersistenceData[res.size()]);
}
protected ContextTypeRegistry getFileTemplateContextRegistry() {
@@ -489,14 +490,14 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
protected TemplateContextType[] getFileTemplateContextTypes() {
Iterator iter= getFileTemplateContextRegistry().contextTypes();
- ArrayList result= new ArrayList();
+ ArrayList result= new ArrayList();
while (iter.hasNext()) {
TemplateContextType contextType= (TemplateContextType)iter.next();
if (getTemplatesOfContextType(contextType).length > 0) {
result.add(contextType);
}
}
- return (TemplateContextType[]) result.toArray(new TemplateContextType[0]);
+ return result.toArray(new TemplateContextType[0]);
}
protected static boolean canAdd(List selected) {
@@ -693,7 +694,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
}
private void export(List selected) {
- Set datas= new HashSet();
+ Set datas= new HashSet();
for (int i= 0; i < selected.size(); i++) {
Object curr= selected.get(i);
if (curr instanceof TemplatePersistenceData) {
@@ -713,7 +714,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
datas.addAll(Arrays.asList(cat));
}
}
- export((TemplatePersistenceData[]) datas.toArray(new TemplatePersistenceData[datas.size()]));
+ export(datas.toArray(new TemplatePersistenceData[datas.size()]));
}
private void export(TemplatePersistenceData[] templates) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/EditTemplateDialog.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/EditTemplateDialog.java
index 55d2b1b5bf8..411d5c763e4 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/EditTemplateDialog.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/EditTemplateDialog.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -73,6 +73,7 @@ import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.ActiveShellExpression;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerActivation;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
@@ -155,8 +156,8 @@ class EditTemplateDialog extends StatusDialog {
private StatusInfo fValidationStatus;
private boolean fSuppressError= true; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=4354
- private Map fGlobalActions= new HashMap(10);
- private List fSelectionActions = new ArrayList(3);
+ private Map fGlobalActions= new HashMap(10);
+ private List fSelectionActions = new ArrayList(3);
private String[][] fContextTypes;
private ContextTypeRegistry fContextTypeRegistry;
@@ -187,7 +188,7 @@ class EditTemplateDialog extends StatusDialog {
// String delim= new Document().getLegalLineDelimiters()[0];
- List contexts= new ArrayList();
+ List contexts= new ArrayList();
for (Iterator it= registry.contextTypes(); it.hasNext();) {
TemplateContextType type= (TemplateContextType) it.next();
// TODO cppdoc? doxygen?
@@ -196,13 +197,11 @@ class EditTemplateDialog extends StatusDialog {
// else
contexts.add(0, new String[] { type.getId(), type.getName(), "" }); //$NON-NLS-1$
}
- Collections.sort(contexts, new Comparator() {
- public int compare(Object o1, Object o2) {
- String[] lhs= (String[]) o1;
- String[] rhs= (String[]) o2;
- return lhs[1].compareTo(rhs[1]);
+ Collections.sort(contexts, new Comparator() {
+ public int compare(String[] s1, String[] s2) {
+ return s1[1].compareTo(s2[1]);
}});
- fContextTypes= (String[][]) contexts.toArray(new String[contexts.size()][]);
+ fContextTypes= contexts.toArray(new String[contexts.size()][]);
fValidationStatus= new StatusInfo();
@@ -413,7 +412,7 @@ class EditTemplateDialog extends StatusDialog {
String prefix= getPrefix();
IDocument document= new Document(prefix + fTemplate.getPattern());
CTextTools tools= CUIPlugin.getDefault().getTextTools();
- tools.setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING);
+ tools.setupCDocumentPartitioner(document, ICPartitions.C_PARTITIONING, null);
IPreferenceStore store= CUIPlugin.getDefault().getCombinedPreferenceStore();
SourceViewer viewer= new CSourceViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL, store);
CodeTemplateSourceViewerConfiguration configuration= new CodeTemplateSourceViewerConfiguration(tools.getColorManager(), store, null, fTemplateProcessor);
@@ -475,7 +474,7 @@ class EditTemplateDialog extends StatusDialog {
}
private void initializeActions() {
- final ArrayList handlerActivations= new ArrayList(3);
+ final ArrayList handlerActivations= new ArrayList(3);
final IHandlerService handlerService= (IHandlerService) PlatformUI.getWorkbench().getAdapter(IHandlerService.class);
getShell().addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
@@ -536,28 +535,28 @@ class EditTemplateDialog extends StatusDialog {
private void fillContextMenu(IMenuManager menu) {
menu.add(new GroupMarker(ITextEditorActionConstants.GROUP_UNDO));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, (IAction) fGlobalActions.get(ITextEditorActionConstants.UNDO));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, (IAction) fGlobalActions.get(ITextEditorActionConstants.REDO));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, fGlobalActions.get(ITextEditorActionConstants.UNDO));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, fGlobalActions.get(ITextEditorActionConstants.REDO));
menu.add(new Separator(ITextEditorActionConstants.GROUP_EDIT));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.CUT));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.COPY));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.PASTE));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.SELECT_ALL));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.CUT));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.COPY));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.PASTE));
+ menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.SELECT_ALL));
menu.add(new Separator(IContextMenuConstants.GROUP_GENERATE));
- menu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, (IAction) fGlobalActions.get("ContentAssistProposal")); //$NON-NLS-1$
+ menu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fGlobalActions.get("ContentAssistProposal")); //$NON-NLS-1$
}
protected void updateSelectionDependentActions() {
- Iterator iterator= fSelectionActions.iterator();
+ Iterator iterator= fSelectionActions.iterator();
while (iterator.hasNext())
- updateAction((String)iterator.next());
+ updateAction(iterator.next());
}
protected void updateAction(String actionId) {
- IAction action= (IAction) fGlobalActions.get(actionId);
+ IAction action= fGlobalActions.get(actionId);
if (action instanceof IUpdate)
((IUpdate) action).update();
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java
index a1255440330..06c4939b1aa 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java
@@ -10,6 +10,7 @@
* Anton Leherbauer (Wind River Systems)
* Markus Schorn (Wind River Systems)
* Sergey Prigogin (Google)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
@@ -181,9 +182,12 @@ public final class PreferencesMessages extends NLS {
public static String CEditorPreferencePage_closeBraces;
public static String CEditorPreferencePage_wrapStrings;
public static String CEditorPreferencePage_escapeStrings;
+ public static String CEditorPreferencePage_GeneralAppearanceGroupTitle;
+ public static String CEditorPreferencePage_SelectDocToolDescription;
public static String CEditorPreferencePage_smartPaste;
public static String CEditorPreferencePage_typing_smartTab;
+ public static String CEditorPreferencePage_WorkspaceDefaultLabel;
public static String SmartTypingConfigurationBlock_autoclose_title;
public static String SmartTypingConfigurationBlock_tabs_title;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties
index b881d109020..2550523bc69 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties
@@ -10,9 +10,10 @@
# Anton Leherbauer (Wind River Systems)
# Markus Schorn (Wind River Systems)
# Sergey Prigogin (Google)
+# Andrew Ferguson (Symbian)
###############################################################################
-CEditorPreferencePage_link=C/C++ Editor Preferences. Note that some preferences may be set on the Text Editors preference page.
+CEditorPreferencePage_link=C/C++ Editor Preferences. General preferences may be set via Text Editors .
CEditorPreferencePage_link_tooltip=Show the shared text editor preferences
CEditorPreferencePage_colors=Synta&x
@@ -191,9 +192,12 @@ CEditorPreferencePage_closeAngularBrackets= brackets
CEditorPreferencePage_closeBraces={B&races}
CEditorPreferencePage_wrapStrings=&Wrap automatically
CEditorPreferencePage_escapeStrings=Escape text w&hen pasting into a string literal
+CEditorPreferencePage_GeneralAppearanceGroupTitle=General appearance
+CEditorPreferencePage_SelectDocToolDescription=Select the documentation tool to be used to determine editor behaviors when no project preference overrides exist
CEditorPreferencePage_smartPaste=Adjust &indentation
CEditorPreferencePage_typing_smartTab= &Tab key indents the current line
+CEditorPreferencePage_WorkspaceDefaultLabel=Workspace default:
# Code Formatting
CodeFormatterPreferencePage_title=Code Style
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CPreview.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CPreview.java
index ba00559ef60..ce41d04a76b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CPreview.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CPreview.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -9,6 +9,7 @@
* IBM Corporation - initial API and implementation
* Sergey Prigogin, Google
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences.formatter;
@@ -110,7 +111,7 @@ public abstract class CPreview {
CTextTools tools= CUIPlugin.getDefault().getTextTools();
fPreviewDocument= new Document();
fWorkingValues= workingValues;
- tools.setupCDocumentPartitioner( fPreviewDocument, ICPartitions.C_PARTITIONING);
+ tools.setupCDocumentPartitioner(fPreviewDocument, ICPartitions.C_PARTITIONING, null);
PreferenceStore prioritizedSettings= new PreferenceStore();
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/AbstractCScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/AbstractCScanner.java
index cf8795db61b..31c9aaab485 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/AbstractCScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/AbstractCScanner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -8,358 +8,96 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software System
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
-
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.resource.StringConverter;
-import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.cdt.ui.IPropertyChangeParticipant;
+import org.eclipse.cdt.ui.text.ICTokenScanner;
+import org.eclipse.cdt.ui.text.ITokenStore;
/**
- * Initialized with a color manager and a preference store, its subclasses are
- * only responsible for providing a list of preference keys for based on which tokens
- * are generated and to use this tokens to define the rules controlling this scanner.
- *
- * This scanner stores the color defined by the color preference key into
- * the color manager under the same key.
- *
- *
- * Preference color key + {@link PreferenceConstants#EDITOR_BOLD_SUFFIX} are used
- * to retrieve whether the token is rendered in bold.
- *
- *
- * Preference color key + {@link PreferenceConstants#EDITOR_ITALIC_SUFFIX} are used
- * to retrieve whether the token is rendered in italic.
- *
- *
- * Preference color key + {@link PreferenceConstants#EDITOR_STRIKETHROUGH_SUFFIX} are used
- * to retrieve whether the token is rendered in strikethrough.
- *
- *
- * Preference color key + {@link PreferenceConstants#EDITOR_UNDERLINE_SUFFIX} are used
- * to retrieve whether the token is rendered in underline.
- *
+ * Convenience implementation.
*/
-public abstract class AbstractCScanner extends BufferedRuleBasedScanner {
-
-
- private IColorManager fColorManager;
- private IPreferenceStore fPreferenceStore;
-
- private Map fTokenMap= new HashMap();
- private String[] fPropertyNamesColor;
- /**
- * Preference keys for boolean preferences which are true
,
- * iff the corresponding token should be rendered bold.
- */
- private String[] fPropertyNamesBold;
- /**
- * Preference keys for boolean preferences which are true
,
- * iff the corresponding token should be rendered italic.
- *
- * @since 4.0
- */
- private String[] fPropertyNamesItalic;
- /**
- * Preference keys for boolean preferences which are true
,
- * iff the corresponding token should be rendered strikethrough.
- *
- * @since 4.0
- */
- private String[] fPropertyNamesStrikethrough;
- /**
- * Preference keys for boolean preferences which are true
,
- * iff the corresponding token should be rendered underline.
- *
- * @since 4.0
- */
- private String[] fPropertyNamesUnderline;
-
-
- private boolean fNeedsLazyColorLoading;
-
- /**
- * Returns an array of preference keys which define the tokens
- * used in the rules of this scanner.
- *
- * The preference key is used access the color in the preference
- * store and in the color manager.
- *
- *
- * Preference key + {@link PreferenceConstants#EDITOR_BOLD_SUFFIX} is used
- * to retrieve whether the token is rendered in bold.
- *
- *
- * Preference key + {@link PreferenceConstants#EDITOR_ITALIC_SUFFIX} is used
- * to retrieve whether the token is rendered in italic.
- *
- *
- * Preference key + {@link PreferenceConstants#EDITOR_UNDERLINE_SUFFIX} is used
- * to retrieve whether the token is rendered underlined.
- *
- *
- * Preference key + {@link PreferenceConstants#EDITOR_STRIKETHROUGH_SUFFIX} is used
- * to retrieve whether the token is rendered stricken out.
- *
- */
- abstract protected String[] getTokenProperties();
-
- /**
- * Creates the list of rules controlling this scanner.
- */
- abstract protected List createRules();
-
-
- /**
- * Creates an abstract C scanner.
- */
- public AbstractCScanner(IColorManager manager, IPreferenceStore store) {
- super();
- fColorManager= manager;
- fPreferenceStore= store;
- }
-
- /**
- * Creates an abstract C scanner.
- */
- public AbstractCScanner(IColorManager manager, IPreferenceStore store, int bufsize) {
- super(bufsize);
- fColorManager= manager;
- fPreferenceStore= store;
- }
-
- /**
- * Must be called after the constructor has been called.
- */
- public final void initialize() {
-
- fPropertyNamesColor= getTokenProperties();
- int length= fPropertyNamesColor.length;
- fPropertyNamesBold= new String[length];
- fPropertyNamesItalic= new String[length];
- fPropertyNamesStrikethrough= new String[length];
- fPropertyNamesUnderline= new String[length];
-
- for (int i= 0; i < length; i++) {
- fPropertyNamesBold[i]= getBoldKey(fPropertyNamesColor[i]);
- fPropertyNamesItalic[i]= getItalicKey(fPropertyNamesColor[i]);
- fPropertyNamesStrikethrough[i]= getStrikethroughKey(fPropertyNamesColor[i]);
- fPropertyNamesUnderline[i]= getUnderlineKey(fPropertyNamesColor[i]);
- }
-
- fNeedsLazyColorLoading= Display.getCurrent() == null;
- for (int i= 0; i < length; i++) {
- if (fNeedsLazyColorLoading)
- addTokenWithProxyAttribute(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
- else
- addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
- }
-
- initializeRules();
+public abstract class AbstractCScanner extends BufferedRuleBasedScanner implements ICTokenScanner {
+ private List pcps;
+ final protected ITokenStore fTokenStore;
+
+ public AbstractCScanner(ITokenStore tokenStore, int size) {
+ this(tokenStore);
+ setBufferSize(size);
}
- protected String getBoldKey(String colorKey) {
- return colorKey + PreferenceConstants.EDITOR_BOLD_SUFFIX;
- }
-
- protected String getItalicKey(String colorKey) {
- return colorKey + PreferenceConstants.EDITOR_ITALIC_SUFFIX;
+ public AbstractCScanner(ITokenStore tokenStore) {
+ fTokenStore= tokenStore;
+ pcps= new ArrayList();
}
- protected String getStrikethroughKey(String colorKey) {
- return colorKey + PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX;
+ protected void addPropertyChangeParticipant(IPropertyChangeParticipant participant) {
+ pcps.add(participant);
}
- protected String getUnderlineKey(String colorKey) {
- return colorKey + PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
- }
-
- public IToken nextToken() {
- if (fNeedsLazyColorLoading)
- resolveProxyAttributes();
- return super.nextToken();
- }
-
- private void resolveProxyAttributes() {
- if (fNeedsLazyColorLoading && Display.getCurrent() != null) {
- for (int i= 0; i < fPropertyNamesColor.length; i++) {
- addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
- }
- fNeedsLazyColorLoading= false;
- }
- }
-
- private void addTokenWithProxyAttribute(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
- fTokenMap.put(colorKey, new Token(createTextAttribute(null, boldKey, italicKey, strikethroughKey, underlineKey)));
- }
-
- private void addToken(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
- if (fColorManager != null && colorKey != null && fColorManager.getColor(colorKey) == null) {
- RGB rgb= PreferenceConverter.getColor(fPreferenceStore, colorKey);
- if (fColorManager instanceof IColorManagerExtension) {
- IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
- ext.unbindColor(colorKey);
- ext.bindColor(colorKey, rgb);
- }
- }
-
- if (!fNeedsLazyColorLoading)
- fTokenMap.put(colorKey, new Token(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey)));
- else {
- Token token= ((Token)fTokenMap.get(colorKey));
- if (token != null)
- token.setData(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey));
- }
- }
-
/**
- * Create a text attribute based on the given color, bold, italic, strikethrough and underline preference keys.
- *
- * @param colorKey the color preference key
- * @param boldKey the bold preference key
- * @param italicKey the italic preference key
- * @param strikethroughKey the strikethrough preference key
- * @param underlineKey the italic preference key
- * @return the created text attribute
- * @since 3.0
+ * Convenience method for setting the scanner rules with a list rather
+ * than an array.
+ * @param rules
*/
- private TextAttribute createTextAttribute(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
- Color color= null;
- if (colorKey != null)
- color= fColorManager.getColor(colorKey);
-
- int style= fPreferenceStore.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
- if (fPreferenceStore.getBoolean(italicKey))
- style |= SWT.ITALIC;
-
- if (fPreferenceStore.getBoolean(strikethroughKey))
- style |= TextAttribute.STRIKETHROUGH;
-
- if (fPreferenceStore.getBoolean(underlineKey))
- style |= TextAttribute.UNDERLINE;
-
- return new TextAttribute(color, null, style);
- }
-
- protected Token getToken(String key) {
- if (fNeedsLazyColorLoading)
- resolveProxyAttributes();
- return (Token) fTokenMap.get(key);
- }
-
- private void initializeRules() {
- List rules= createRules();
- if (rules != null) {
+ public final void setRules(List rules) {
+ if(rules==null) {
+ setRules((IRule[])null);
+ } else {
IRule[] result= new IRule[rules.size()];
rules.toArray(result);
- setRules(result);
+ setRules(result);
}
}
- private int indexOf(String property) {
- if (property != null) {
- int length= fPropertyNamesColor.length;
- for (int i= 0; i < length; i++) {
- if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i]) || property.equals(fPropertyNamesItalic[i]) || property.equals(fPropertyNamesStrikethrough[i]) || property.equals(fPropertyNamesUnderline[i]))
- return i;
- }
- }
- return -1;
- }
-
- public boolean affectsBehavior(PropertyChangeEvent event) {
- return indexOf(event.getProperty()) >= 0;
- }
-
- public void adaptToPreferenceChange(PropertyChangeEvent event) {
- String p= event.getProperty();
- int index= indexOf(p);
- Token token= getToken(fPropertyNamesColor[index]);
- if (fPropertyNamesColor[index].equals(p))
- adaptToColorChange(token, event);
- else if (fPropertyNamesBold[index].equals(p))
- adaptToStyleChange(token, event, SWT.BOLD);
- else if (fPropertyNamesItalic[index].equals(p))
- adaptToStyleChange(token, event, SWT.ITALIC);
- else if (fPropertyNamesStrikethrough[index].equals(p))
- adaptToStyleChange(token, event, TextAttribute.STRIKETHROUGH);
- else if (fPropertyNamesUnderline[index].equals(p))
- adaptToStyleChange(token, event, TextAttribute.UNDERLINE);
- }
-
- private void adaptToColorChange(Token token, PropertyChangeEvent event) {
- RGB rgb= null;
-
- Object value= event.getNewValue();
- if (value instanceof RGB)
- rgb= (RGB) value;
- else if (value instanceof String)
- rgb= StringConverter.asRGB((String) value);
-
- if (rgb != null) {
-
- String property= event.getProperty();
- Color color= fColorManager.getColor(property);
-
- if ((color == null || !rgb.equals(color.getRGB())) && fColorManager instanceof IColorManagerExtension) {
- IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
-
- ext.unbindColor(property);
- ext.bindColor(property, rgb);
-
- color= fColorManager.getColor(property);
- }
-
- Object data= token.getData();
- if (data instanceof TextAttribute) {
- TextAttribute oldAttr= (TextAttribute) data;
- token.setData(new TextAttribute(color, oldAttr.getBackground(), oldAttr.getStyle()));
- }
- }
- }
-
- private void adaptToStyleChange(Token token, PropertyChangeEvent event, int styleAttribute) {
- boolean eventValue= false;
- Object value= event.getNewValue();
- if (value instanceof Boolean)
- eventValue= ((Boolean) value).booleanValue();
- else if (IPreferenceStore.TRUE.equals(value))
- eventValue= true;
-
- Object data= token.getData();
- if (data instanceof TextAttribute) {
- TextAttribute oldAttr= (TextAttribute) data;
- boolean activeValue= (oldAttr.getStyle() & styleAttribute) == styleAttribute;
- if (activeValue != eventValue)
- token.setData(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(), eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
- }
- }
- /**
- * Returns the preference store.
- *
- * @return the preference store.
- *
- * @since 3.0
+ /*
+ * @see org.eclipse.jface.text.rules.RuleBasedScanner#nextToken()
*/
- protected IPreferenceStore getPreferenceStore() {
- return fPreferenceStore;
+ public IToken nextToken() {
+ fTokenStore.ensureTokensInitialised();
+ return super.nextToken();
}
-}
+
+ public IToken getToken(String key) {
+ return fTokenStore.getToken(key);
+ }
+
+ public IPreferenceStore getPreferenceStore() {
+ return fTokenStore.getPreferenceStore();
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.IPropertyChangeParticipant#adaptToPreferenceChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void adaptToPreferenceChange(PropertyChangeEvent event) {
+ if(fTokenStore.affectsBehavior(event)) {
+ fTokenStore.adaptToPreferenceChange(event);
+ }
+ for(Iterator i= pcps.iterator(); i.hasNext(); ) {
+ ((IPropertyChangeParticipant)i.next()).adaptToPreferenceChange(event);
+ }
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.IPropertyChangeParticipant#affectsBehavior(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public boolean affectsBehavior(PropertyChangeEvent event) {
+ boolean result= fTokenStore.affectsBehavior(event);
+ for(Iterator i= pcps.iterator(); !result && i.hasNext(); ) {
+ result |= ((IPropertyChangeParticipant)i.next()).affectsBehavior(event);
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAutoIndentStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAutoIndentStrategy.java
index aa60713d07c..208825fb6d4 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAutoIndentStrategy.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CAutoIndentStrategy.java
@@ -9,7 +9,8 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
- * Sergey Prigogin, Google
+ * Sergey Prigogin (Google)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
@@ -44,7 +45,6 @@ import org.eclipse.cdt.internal.ui.editor.IndentUtil;
* Auto indent strategy sensitive to brackets.
*/
public class CAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
- private static final String MULTILINE_COMMENT_CLOSE = "*/"; //$NON-NLS-1$
/** The line comment introducer. Value is "{@value}" */
private static final String LINE_COMMENT= "//"; //$NON-NLS-1$
// private static final GCCScannerExtensionConfiguration C_GNU_SCANNER_EXTENSION = new GCCScannerExtensionConfiguration();
@@ -1120,43 +1120,20 @@ public class CAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
super.customizeDocumentCommand(d, c);
return;
}
-
- if (c.length == 0 && c.text != null && isLineDelimiter(d, c.text)) {
- if (isAppendToOpenMultilineComment(d, c)) {
- // special case: multi-line comment at end of document (bug 48339)
- CCommentAutoIndentStrategy.commentIndentAfterNewLine(d, c);
- } else {
- smartIndentAfterNewLine(d, c);
- }
- } else if ("/".equals(c.text) && isAppendToOpenMultilineComment(d, c)) { //$NON-NLS-1$
- // special case: multi-line comment at end of document (bug 48339)
- CCommentAutoIndentStrategy.commentIndentForCommentEnd(d, c);
+
+ /*
+ * I removed the workaround for 48339 as I believe the recent changes to
+ * FastCPartitioner are enough to fix this.
+ */
+ boolean isNewLine= c.length == 0 && c.text != null && isLineDelimiter(d, c.text);
+ if (isNewLine) {
+ smartIndentAfterNewLine(d, c);
} else if (c.text.length() == 1) {
smartIndentOnKeypress(d, c);
} else if (c.text.length() > 1 && getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SMART_PASTE)) {
smartPaste(d, c); // no smart backspace for paste
}
}
-
- /**
- * Check, if the command appends to an open multi-line comment.
- * @param d the document
- * @param c the document command
- * @return true, if the command appends to an open multi-line comment.
- */
- private boolean isAppendToOpenMultilineComment(IDocument d, DocumentCommand c) {
- if (d.getLength() >= 2 && c.offset == d.getLength()) {
- try {
- String contentType = TextUtilities.getContentType(d, fPartitioning, c.offset - 1, false);
- if (ICPartitions.C_MULTI_LINE_COMMENT.equals(contentType)) {
- return !d.get(c.offset - 2, 2).equals(MULTILINE_COMMENT_CLOSE);
- }
- } catch (BadLocationException exc) {
- // see below
- }
- }
- return false;
- }
private static IPreferenceStore getPreferenceStore() {
return CUIPlugin.getDefault().getCombinedPreferenceStore();
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java
index 4820b3627e3..5354ebf1932 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java
@@ -9,19 +9,20 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
-import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.cdt.core.model.ICLanguageKeywords;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
@@ -45,31 +46,22 @@ public final class CCodeScanner extends AbstractCScanner {
/**
* Creates a C/C++ code scanner.
- *
- * @param manager the color manager
- * @param store the reference store
+ * @param factory
* @param keywords the keywords defined by the language dialect
*/
- public CCodeScanner(IColorManager manager, IPreferenceStore store, ICLanguageKeywords keywords) {
- super(manager, store);
+ public CCodeScanner(ITokenStoreFactory factory, ICLanguageKeywords keywords) {
+ super(factory.createTokenStore(fgTokenProperties));
fKeywords= keywords;
- initialize();
+ setRules(createRules());
}
-
- /*
- * @see AbstractCScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fgTokenProperties;
- }
-
+
/*
* @see AbstractCScanner#createRules()
*/
- protected List createRules() {
+ protected List createRules() {
- List rules= new ArrayList();
- Token token;
+ List rules= new ArrayList();
+ IToken token;
// Add generic white space rule.
rules.add(new WhitespaceRule(new CWhitespaceDetector()));
@@ -105,13 +97,4 @@ public final class CCodeScanner extends AbstractCScanner {
setDefaultReturnToken(getToken(ICColorConstants.C_DEFAULT));
return rules;
}
-
- /*
- * @see AbstractCScanner#adaptToPreferenceChange(PropertyChangeEvent)
- */
- public void adaptToPreferenceChange(PropertyChangeEvent event) {
- if (super.affectsBehavior(event)) {
- super.adaptToPreferenceChange(event);
- }
- }
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentAutoIndentStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentAutoIndentStrategy.java
deleted file mode 100644
index ef5a2b4166a..00000000000
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentAutoIndentStrategy.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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
- * QNX Software System
- * Anton Leherbauer (Wind River Systems) - Fixed bug 48339
- *******************************************************************************/
-package org.eclipse.cdt.internal.ui.text;
-
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;
-import org.eclipse.jface.text.DocumentCommand;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-
-/**
- * Auto indent strategy for C/C++ multiline comments
- */
-public class CCommentAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
-
- public CCommentAutoIndentStrategy() {
- }
-
- /**
- * Returns whether the text ends with one of the given search strings.
- */
- private boolean endsWithDelimiter(IDocument d, String txt) {
- String[] delimiters= d.getLegalLineDelimiters();
-
- for (int i= 0; i < delimiters.length; i++) {
- if (txt.endsWith(delimiters[i]))
- return true;
- }
-
- return false;
- }
-
- /**
- * Copies the indentation of the previous line and adds a star.
- * If the comment just started on this line adds also a blank.
- *
- * @param d the document to work on
- * @param c the command to deal with
- */
- static void commentIndentAfterNewLine(IDocument d, DocumentCommand c) {
-
- if (c.offset == -1 || d.getLength() == 0)
- return;
-
- try {
- // find start of line
- IRegion info= d.getLineInformationOfOffset(c.offset);
- int start= info.getOffset();
-
- // find white spaces
- int end= findEndOfWhiteSpaceAt(d, start, c.offset);
-
- StringBuffer buf= new StringBuffer(c.text);
- if (end >= start) { // 1GEYL1R: ITPJUI:ALL - java doc edit smartness not work for class comments
- // append to input
- buf.append(d.get(start, end - start));
- if (end < c.offset) {
- if (d.getChar(end) == '/') {
- // comment started on this line
- buf.append(" * "); //$NON-NLS-1$
- } else if (d.getChar(end) == '*') {
- buf.append("* "); //$NON-NLS-1$
- }
- }
- }
-
-
- c.text= buf.toString();
-
- } catch (BadLocationException excp) {
- // stop work
- }
- }
-
- static int findEndOfWhiteSpaceAt(IDocument document, int offset, int end) throws BadLocationException {
- while (offset < end) {
- char c= document.getChar(offset);
- if (c != ' ' && c != '\t') {
- return offset;
- }
- offset++;
- }
- return end;
- }
-
- static void commentIndentForCommentEnd(IDocument d, DocumentCommand c) {
- if (c.offset < 2 || d.getLength() == 0) {
- return;
- }
- try {
- if ("* ".equals(d.get(c.offset - 2, 2))) { //$NON-NLS-1$
- // modify document command
- c.length++;
- c.offset--;
- }
- } catch (BadLocationException excp) {
- // stop work
- }
- }
-
- /*
- * @see IAutoIndentStrategy#customizeDocumentCommand
- */
- public void customizeDocumentCommand(IDocument d, DocumentCommand c) {
- if (c.length == 0 && c.text != null && endsWithDelimiter(d, c.text))
- commentIndentAfterNewLine(d, c);
- else if ("/".equals(c.text)) { //$NON-NLS-1$
- commentIndentForCommentEnd(d, c);
- }
- }
-}
-
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentScanner.java
index b3eb10ff8ee..350fd6e91ec 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCommentScanner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -8,152 +8,49 @@
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
-
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.StringTokenizer;
-import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.IWordDetector;
-import org.eclipse.jface.text.rules.Token;
-import org.eclipse.jface.text.rules.WordRule;
-import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
+import org.eclipse.cdt.ui.text.TaskTagRule;
/**
- * CCommentScanner.java
+ * Default token-scanner used for plain (non-documentation-comment) single and multi-line comments, with awareness of
+ * task tags.
*/
-public class CCommentScanner extends AbstractCScanner
-{
- private static class TaskTagDetector implements IWordDetector {
+public class CCommentScanner extends AbstractCScanner {
+ private static String TASK_TAG_KEY= PreferenceConstants.EDITOR_TASK_TAG_COLOR;
+ private Preferences fCorePreferenceStore;
+
+ public CCommentScanner(ITokenStoreFactory tokenStoreFactory, String defaultTokenProperty) {
+ this(tokenStoreFactory, null, defaultTokenProperty, new String[] { defaultTokenProperty, TASK_TAG_KEY });
+ }
- public boolean isWordStart(char c) {
- return Character.isLetter(c);
- }
+ public CCommentScanner(ITokenStoreFactory tokenStoreFactory, Preferences coreStore, String defaultTokenProperty) {
+ this(tokenStoreFactory, coreStore, defaultTokenProperty, new String[] { defaultTokenProperty, TASK_TAG_KEY });
+ }
- public boolean isWordPart(char c) {
- return Character.isLetter(c);
- }
- }
-
- private class TaskTagRule extends WordRule {
-
- private IToken fToken;
-
- public TaskTagRule(IToken token) {
- super(new TaskTagDetector(), Token.UNDEFINED);
- fToken= token;
- }
-
- public void clearTaskTags() {
- fWords.clear();
- }
-
- public void addTaskTags(String value) {
- String[] tasks= split(value, ","); //$NON-NLS-1$
- for (int i= 0; i < tasks.length; i++) {
- if (tasks[i].length() > 0) {
- addWord(tasks[i], fToken);
- }
- }
- }
-
- private String[] split(String value, String delimiters) {
- StringTokenizer tokenizer= new StringTokenizer(value, delimiters);
- int size= tokenizer.countTokens();
- String[] tokens= new String[size];
- for (int i = 0; i < size; i++)
- tokens[i] = tokenizer.nextToken();
- return tokens;
- }
- }
-
- private static final String TODO_TASK_TAGS= CCorePreferenceConstants.TODO_TASK_TAGS;
- protected static final String TASK_TAG= ICColorConstants.TASK_TAG;
-
- private TaskTagRule fTaskTagRule;
- private Preferences fCorePreferenceStore;
- private String fDefaultTokenProperty;
- private String[] fTokenProperties;
-
- public CCommentScanner(IColorManager manager, IPreferenceStore store, String defaultTokenProperty) {
- this(manager, store, null, defaultTokenProperty, new String[] { defaultTokenProperty, TASK_TAG });
- }
-
- public CCommentScanner(IColorManager manager, IPreferenceStore store, Preferences coreStore, String defaultTokenProperty) {
- this(manager, store, coreStore, defaultTokenProperty, new String[] { defaultTokenProperty, TASK_TAG });
- }
-
- public CCommentScanner(IColorManager manager, IPreferenceStore store, Preferences coreStore, String defaultTokenProperty, String[] tokenProperties) {
- super(manager, store);
-
- fCorePreferenceStore= coreStore;
- fDefaultTokenProperty= defaultTokenProperty;
- fTokenProperties= tokenProperties;
-
- initialize();
- }
-
- /*
- * @see AbstractCScanner#createRules()
- */
- protected List createRules() {
- List list= new ArrayList();
-
- String tasks= null;
- if (getPreferenceStore().contains(TODO_TASK_TAGS)) {
- tasks= getPreferenceStore().getString(TODO_TASK_TAGS);
- } else if (fCorePreferenceStore != null) {
- tasks= fCorePreferenceStore.getString(TODO_TASK_TAGS);
- }
-
- if (tasks != null) {
- // Add rule for Task Tags.
- fTaskTagRule= new TaskTagRule(getToken(TASK_TAG));
- fTaskTagRule.addTaskTags(tasks);
- list.add(fTaskTagRule);
- }
-
- setDefaultReturnToken(getToken(fDefaultTokenProperty));
-
- return list;
- }
-
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractJavaScanner#affectsBehavior(org.eclipse.jface.util.PropertyChangeEvent)
- */
- public boolean affectsBehavior(PropertyChangeEvent event) {
- return event.getProperty().equals(TODO_TASK_TAGS) || super.affectsBehavior(event);
- }
-
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractJavaScanner#adaptToPreferenceChange(org.eclipse.jface.util.PropertyChangeEvent)
- */
- public void adaptToPreferenceChange(PropertyChangeEvent event) {
- if (fTaskTagRule != null && event.getProperty().equals(TODO_TASK_TAGS)) {
- Object value= event.getNewValue();
-
- if (value instanceof String) {
- fTaskTagRule.clearTaskTags();
- fTaskTagRule.addTaskTags((String) value);
- }
-
- } else if (super.affectsBehavior(event)) {
- super.adaptToPreferenceChange(event);
- }
- }
-
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractJavaScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fTokenProperties;
- }
+ private CCommentScanner(ITokenStoreFactory tokenStoreFactory, Preferences coreStore, String defaultTokenProperty, String[] tokenProperties) {
+ super(tokenStoreFactory.createTokenStore(tokenProperties));
+ fCorePreferenceStore= coreStore;
+ setRules(createRules(defaultTokenProperty));
+ }
+ protected List createRules(String defaultTokenProperty) {
+ setDefaultReturnToken(getToken(defaultTokenProperty));
+ IPreferenceStore store= fTokenStore.getPreferenceStore();
+ String taskWords= TaskTagRule.getTaskWords(store, fCorePreferenceStore);
+ TaskTagRule taskTagRule= new TaskTagRule(getToken(TASK_TAG_KEY), taskWords);
+ addPropertyChangeParticipant(taskTagRule);
+ return Collections.singletonList((IRule)taskTagRule);
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPreprocessorScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPreprocessorScanner.java
index 1cb52299a58..45ee69b1108 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPreprocessorScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPreprocessorScanner.java
@@ -7,20 +7,21 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.PatternRule;
-import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.cdt.core.model.ICLanguageKeywords;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
@@ -45,26 +46,22 @@ public class CPreprocessorScanner extends AbstractCScanner {
/**
* Creates a C/C++ preprocessor scanner.
- *
- * @param manager the color manager
- * @param store the preference store
* @param keywords the keywords defined by the language dialect
*/
- public CPreprocessorScanner(IColorManager manager, IPreferenceStore store, ICLanguageKeywords keywords) {
- super(manager, store);
+ public CPreprocessorScanner(ITokenStoreFactory factory, ICLanguageKeywords keywords) {
+ super(factory.createTokenStore(fgTokenProperties));
fKeywords= keywords;
- initialize();
+ setRules(createRules());
}
/*
* @see org.eclipse.cdt.internal.ui.text.AbstractCScanner#createRules()
*/
- protected List createRules() {
+ protected List createRules() {
+ IToken defaultToken= getToken(ICColorConstants.PP_DEFAULT);
- Token defaultToken= getToken(ICColorConstants.PP_DEFAULT);
-
- List rules= new ArrayList();
- Token token;
+ List rules= new ArrayList();
+ IToken token;
// Add generic white space rule.
rules.add(new WhitespaceRule(new CWhitespaceDetector()));
@@ -110,12 +107,4 @@ public class CPreprocessorScanner extends AbstractCScanner {
setDefaultReturnToken(defaultToken);
return rules;
}
-
- /*
- * @see org.eclipse.cdt.internal.ui.text.AbstractCScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fgTokenProperties;
- }
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
index 7f0a8ca7f5f..7c867888de7 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java
@@ -17,6 +17,8 @@ package org.eclipse.cdt.internal.ui.text;
import java.util.Arrays;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
@@ -77,6 +79,12 @@ import org.eclipse.cdt.ui.CElementContentProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.ILanguageUI;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.ICTokenScanner;
+import org.eclipse.cdt.ui.text.ITokenStore;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
+import org.eclipse.cdt.ui.text.doctools.DefaultMultilineCommentAutoEditStrategy;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
import org.eclipse.cdt.internal.corext.util.CodeFormatterUtil;
@@ -90,6 +98,7 @@ import org.eclipse.cdt.internal.ui.text.c.hover.CMacroExpansionInformationProvid
import org.eclipse.cdt.internal.ui.text.contentassist.CContentAssistProcessor;
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
import org.eclipse.cdt.internal.ui.text.correction.CCorrectionAssistant;
+import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
import org.eclipse.cdt.internal.ui.typehierarchy.THInformationControl;
import org.eclipse.cdt.internal.ui.typehierarchy.THInformationProvider;
@@ -111,11 +120,11 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
/**
* The C multi-line comment scanner.
*/
- private AbstractCScanner fMultilineCommentScanner;
+ private ICTokenScanner fMultilineDocCommentScanner;
/**
* The C single-line comment scanner.
*/
- private AbstractCScanner fSinglelineCommentScanner;
+ private ICTokenScanner fSinglelineDocCommentScanner;
/**
* The C string scanner.
*/
@@ -146,24 +155,6 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
initializeScanners();
}
- /**
- * Returns the C multi-line comment scanner for this configuration.
- *
- * @return the C multi-line comment scanner
- */
- protected RuleBasedScanner getMultilineCommentScanner() {
- return fMultilineCommentScanner;
- }
-
- /**
- * Returns the C single-line comment scanner for this configuration.
- *
- * @return the C single-line comment scanner
- */
- protected RuleBasedScanner getSinglelineCommentScanner() {
- return fSinglelineCommentScanner;
- }
-
/**
* Returns the C string scanner for this configuration.
*
@@ -184,10 +175,10 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
}
AbstractCScanner scanner= null;
if (language instanceof ICLanguageKeywords) {
- scanner= new CPreprocessorScanner(getColorManager(), fPreferenceStore, (ICLanguageKeywords)language);
+ scanner= new CPreprocessorScanner(getTokenStoreFactory(), (ICLanguageKeywords)language);
}
if (scanner == null) {
- scanner= new CPreprocessorScanner(getColorManager(), fPreferenceStore, GPPLanguage.getDefault());
+ scanner= new CPreprocessorScanner(getTokenStoreFactory(), GPPLanguage.getDefault());
}
fPreprocessorScanner= scanner;
return fPreprocessorScanner;
@@ -250,14 +241,12 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
presenter.setSizeConstraints(50, 20, true, false);
return presenter;
}
-
+
/**
* Initializes the scanners.
*/
private void initializeScanners() {
- fMultilineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_MULTI_LINE_COMMENT);
- fSinglelineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
- fStringScanner= new SingleTokenCScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_STRING);
+ fStringScanner= new SingleTokenCScanner(getTokenStoreFactory(), ICColorConstants.C_STRING);
}
/**
@@ -274,17 +263,29 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
-
- //TextAttribute attr = new TextAttribute(manager.getColor(ICColorConstants.C_DEFAULT));
- dr= new DefaultDamagerRepairer(getSinglelineCommentScanner());
+ dr= new DefaultDamagerRepairer(new CCommentScanner(getTokenStoreFactory(), ICColorConstants.C_SINGLE_LINE_COMMENT));
reconciler.setDamager(dr, ICPartitions.C_SINGLE_LINE_COMMENT);
reconciler.setRepairer(dr, ICPartitions.C_SINGLE_LINE_COMMENT);
-
- dr= new DefaultDamagerRepairer(getMultilineCommentScanner());
+
+ dr= new DefaultDamagerRepairer(new CCommentScanner(getTokenStoreFactory(), ICColorConstants.C_MULTI_LINE_COMMENT));
reconciler.setDamager(dr, ICPartitions.C_MULTI_LINE_COMMENT);
reconciler.setRepairer(dr, ICPartitions.C_MULTI_LINE_COMMENT);
-
+
+ ICTokenScanner docCommentSingleScanner= getSinglelineDocCommentScanner(getProject());
+ if(docCommentSingleScanner!=null) {
+ dr= new DefaultDamagerRepairer(docCommentSingleScanner);
+ reconciler.setDamager(dr, ICPartitions.C_SINGLE_LINE_DOC_COMMENT);
+ reconciler.setRepairer(dr, ICPartitions.C_SINGLE_LINE_DOC_COMMENT);
+ }
+
+ ICTokenScanner docCommentMultiScanner= getMultilineDocCommentScanner(getProject());
+ if(docCommentMultiScanner!=null) {
+ dr= new DefaultDamagerRepairer(docCommentMultiScanner);
+ reconciler.setDamager(dr, ICPartitions.C_MULTI_LINE_DOC_COMMENT);
+ reconciler.setRepairer(dr, ICPartitions.C_MULTI_LINE_DOC_COMMENT);
+ }
+
dr= new DefaultDamagerRepairer(getStringScanner());
reconciler.setDamager(dr, ICPartitions.C_STRING);
reconciler.setRepairer(dr, ICPartitions.C_STRING);
@@ -299,7 +300,33 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
return reconciler;
}
+
+ /**
+ * Returns the C multi-line comment scanner for this configuration.
+ *
+ * @return the C multi-line comment scanner
+ */
+ protected ICTokenScanner getMultilineDocCommentScanner(IResource resource) {
+ if (fMultilineDocCommentScanner == null) {
+ IDocCommentViewerConfiguration owner= DocCommentOwnerManager.getInstance().getCommentOwner(resource).getMultilineConfiguration();
+ fMultilineDocCommentScanner= owner.createCommentScanner(getTokenStoreFactory());
+ }
+ return fMultilineDocCommentScanner;
+ }
+ /**
+ * Returns the C single-line comment scanner for this configuration.
+ *
+ * @return the C single-line comment scanner
+ */
+ protected ICTokenScanner getSinglelineDocCommentScanner(IResource resource) {
+ if (fSinglelineDocCommentScanner == null) {
+ IDocCommentViewerConfiguration owner= DocCommentOwnerManager.getInstance().getCommentOwner(resource).getSinglelineConfiguration();
+ fSinglelineDocCommentScanner= owner.createCommentScanner(getTokenStoreFactory());
+ }
+ return fSinglelineDocCommentScanner;
+ }
+
/**
* @return the code scanner for the given language
*/
@@ -310,14 +337,14 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
RuleBasedScanner scanner= null;
if (language instanceof ICLanguageKeywords) {
ICLanguageKeywords cLang= (ICLanguageKeywords)language;
- scanner = new CCodeScanner(getColorManager(), fPreferenceStore, cLang);
+ scanner = new CCodeScanner(getTokenStoreFactory(), cLang);
} else if (language != null) {
ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class);
if (languageUI != null)
scanner = languageUI.getCodeScanner();
}
if (scanner == null) {
- scanner = new CCodeScanner(getColorManager(), fPreferenceStore, GPPLanguage.getDefault());
+ scanner = new CCodeScanner(getTokenStoreFactory(), GPPLanguage.getDefault());
}
if (scanner instanceof AbstractCScanner) {
fCodeScanner= (AbstractCScanner)scanner;
@@ -347,6 +374,12 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_SINGLE_LINE_COMMENT);
assistant.setContentAssistProcessor(processor, ICPartitions.C_SINGLE_LINE_COMMENT);
+ processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_MULTI_LINE_DOC_COMMENT);
+ assistant.setContentAssistProcessor(processor, ICPartitions.C_MULTI_LINE_DOC_COMMENT);
+
+ processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_SINGLE_LINE_DOC_COMMENT);
+ assistant.setContentAssistProcessor(processor, ICPartitions.C_SINGLE_LINE_DOC_COMMENT);
+
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_STRING);
assistant.setContentAssistProcessor(processor, ICPartitions.C_STRING);
@@ -410,26 +443,46 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
*/
public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
String partitioning= getConfiguredDocumentPartitioning(sourceViewer);
+
+ IDocCommentOwner owner= DocCommentOwnerManager.getInstance().getCommentOwner(getProject());
+ IAutoEditStrategy single= owner.getSinglelineConfiguration().createAutoEditStrategy();
+ IAutoEditStrategy multi= owner.getMultilineConfiguration().createAutoEditStrategy();
+
+ IAutoEditStrategy[] NONE= new IAutoEditStrategy[0];
+
if (ICPartitions.C_MULTI_LINE_COMMENT.equals(contentType))
- return new IAutoEditStrategy[] { new CCommentAutoIndentStrategy() };
+ return new IAutoEditStrategy[] { new DefaultMultilineCommentAutoEditStrategy() };
+ if (ICPartitions.C_SINGLE_LINE_DOC_COMMENT.equals(contentType))
+ return single!=null ? new IAutoEditStrategy[] {single} : NONE;
+ else if (ICPartitions.C_MULTI_LINE_DOC_COMMENT.equals(contentType))
+ return multi!=null? new IAutoEditStrategy[] {multi} : NONE;
else if (ICPartitions.C_STRING.equals(contentType))
- return new IAutoEditStrategy[] { /*new SmartSemicolonAutoEditStrategy(partitioning),*/ new CStringAutoIndentStrategy(partitioning, getProject()) };
+ return new IAutoEditStrategy[] { /*new SmartSemicolonAutoEditStrategy(partitioning),*/ new CStringAutoIndentStrategy(partitioning, getCProject()) };
else
- return new IAutoEditStrategy[] { new CAutoIndentStrategy(partitioning, getProject()) };
+ return new IAutoEditStrategy[] { new CAutoIndentStrategy(partitioning, getCProject()) };
}
-
+
/**
* @see SourceViewerConfiguration#getDoubleClickStrategy(ISourceViewer, String)
*/
public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) {
if (ICPartitions.C_MULTI_LINE_COMMENT.equals(contentType) ||
- ICPartitions.C_SINGLE_LINE_COMMENT.equals(contentType))
+ ICPartitions.C_SINGLE_LINE_COMMENT.equals(contentType)) {
return new DefaultTextDoubleClickStrategy();
- else if (ICPartitions.C_STRING.equals(contentType) ||
- ICPartitions.C_CHARACTER.equals(contentType))
+ } else if (ICPartitions.C_SINGLE_LINE_DOC_COMMENT.equals(contentType)) {
+ IDocCommentOwner owner= DocCommentOwnerManager.getInstance().getCommentOwner(getProject());
+ ITextDoubleClickStrategy single= owner.getSinglelineConfiguration().createDoubleClickStrategy();
+ return single != null ? single : new DefaultTextDoubleClickStrategy();
+ } else if(ICPartitions.C_MULTI_LINE_DOC_COMMENT.equals(contentType)) {
+ IDocCommentOwner owner= DocCommentOwnerManager.getInstance().getCommentOwner(getProject());
+ ITextDoubleClickStrategy multi= owner.getMultilineConfiguration().createDoubleClickStrategy();
+ return multi!=null ? multi : new DefaultTextDoubleClickStrategy();
+ } else if (ICPartitions.C_STRING.equals(contentType) ||
+ ICPartitions.C_CHARACTER.equals(contentType)) {
return new CStringDoubleClickSelector(getConfiguredDocumentPartitioning(sourceViewer));
- else if (ICPartitions.C_PREPROCESSOR.equals(contentType))
+ } else if (ICPartitions.C_PREPROCESSOR.equals(contentType)) {
return new CStringDoubleClickSelector(getConfiguredDocumentPartitioning(sourceViewer), new CDoubleClickSelector());
+ }
return new CDoubleClickSelector();
}
@@ -444,7 +497,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
* @see SourceViewerConfiguration#getIndentPrefixes(ISourceViewer, String)
*/
public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) {
- ICProject project= getProject();
+ ICProject project= getCProject();
final int tabWidth= CodeFormatterUtil.getTabWidth(project);
final int indentWidth= CodeFormatterUtil.getIndentWidth(project);
boolean allowTabs= tabWidth <= indentWidth;
@@ -504,7 +557,12 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
return new String(spaceChars);
}
- private ICProject getProject() {
+ /**
+ * Returns the ICProject associated with this CSourceViewerConfiguration, or null if
+ * no ICProject could be determined
+ * @return
+ */
+ private ICProject getCProject() {
ITextEditor editor= getEditor();
if (editor == null)
return null;
@@ -527,7 +585,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
* @see SourceViewerConfiguration#getTabWidth(ISourceViewer)
*/
public int getTabWidth(ISourceViewer sourceViewer) {
- return CodeFormatterUtil.getTabWidth(getProject());
+ return CodeFormatterUtil.getTabWidth(getCProject());
}
/**
@@ -536,7 +594,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
* @return the indent width
*/
public int getIndentWidth(ISourceViewer sourceViewer) {
- return CodeFormatterUtil.getIndentWidth(getProject());
+ return CodeFormatterUtil.getIndentWidth(getCProject());
}
/**
@@ -546,7 +604,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
* @return true
if spaces should be used for indentation
*/
public boolean useSpacesOnly(ISourceViewer sourceViewer) {
- ICProject project= getProject();
+ ICProject project= getCProject();
String option;
if (project == null)
option= CCorePlugin.getOption(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
@@ -628,7 +686,10 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
ICPartitions.C_SINGLE_LINE_COMMENT,
ICPartitions.C_STRING,
ICPartitions.C_CHARACTER,
- ICPartitions.C_PREPROCESSOR};
+ ICPartitions.C_PREPROCESSOR,
+ ICPartitions.C_SINGLE_LINE_DOC_COMMENT,
+ ICPartitions.C_MULTI_LINE_DOC_COMMENT
+ };
}
/**
@@ -645,8 +706,8 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
}
public boolean affectsBehavior(PropertyChangeEvent event) {
- if (fMultilineCommentScanner.affectsBehavior(event)
- || fSinglelineCommentScanner.affectsBehavior(event)
+ if ((fMultilineDocCommentScanner != null && fMultilineDocCommentScanner.affectsBehavior(event))
+ || (fSinglelineDocCommentScanner != null && fSinglelineDocCommentScanner.affectsBehavior(event))
|| fStringScanner.affectsBehavior(event)) {
return true;
}
@@ -739,10 +800,10 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
public void handlePropertyChangeEvent(PropertyChangeEvent event) {
if (fCodeScanner != null && fCodeScanner.affectsBehavior(event))
fCodeScanner.adaptToPreferenceChange(event);
- if (fMultilineCommentScanner.affectsBehavior(event))
- fMultilineCommentScanner.adaptToPreferenceChange(event);
- if (fSinglelineCommentScanner.affectsBehavior(event))
- fSinglelineCommentScanner.adaptToPreferenceChange(event);
+ if (fMultilineDocCommentScanner!=null && fMultilineDocCommentScanner.affectsBehavior(event))
+ fMultilineDocCommentScanner.adaptToPreferenceChange(event);
+ if (fSinglelineDocCommentScanner!=null && fSinglelineDocCommentScanner.affectsBehavior(event))
+ fSinglelineDocCommentScanner.adaptToPreferenceChange(event);
if (fStringScanner.affectsBehavior(event))
fStringScanner.adaptToPreferenceChange(event);
if (fPreprocessorScanner != null && fPreprocessorScanner.affectsBehavior(event))
@@ -858,9 +919,11 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
*/
public void resetScanners() {
fCodeScanner= null;
+ fMultilineDocCommentScanner= null;
+ fSinglelineDocCommentScanner= null;
fPreprocessorScanner= null;
}
-
+
/**
* Creates macro exploration presenter.
* @param sourceViewer
@@ -898,5 +961,21 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
};
return conrolCreator;
}
+
+ /**
+ * @return the IProject associated with this CSourceViewerConfiguration, or null if
+ * no IProject could be determined
+ */
+ private IProject getProject() {
+ ICProject cproject= getCProject();
+ return cproject!=null ? cproject.getProject() :null;
+ }
-}
+ private ITokenStoreFactory getTokenStoreFactory() {
+ return new ITokenStoreFactory() {
+ public ITokenStore createTokenStore(String[] propertyColorNames) {
+ return new TokenStore(getColorManager(), fPreferenceStore, propertyColorNames);
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
index 1fd70040d3b..9c906510013 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 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
@@ -9,9 +9,14 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.IDocument;
@@ -26,7 +31,11 @@ import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.ITokenStore;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
import org.eclipse.cdt.internal.ui.text.util.CColorManager;
@@ -35,14 +44,14 @@ import org.eclipse.cdt.internal.ui.text.util.CColorManager;
* its clients.
*/
public class CTextTools {
-
+
private class PreferenceListener implements IPropertyChangeListener, Preferences.IPropertyChangeListener {
public void propertyChange(PropertyChangeEvent event) {
adaptToPreferenceChange(event);
}
- public void propertyChange(Preferences.PropertyChangeEvent event) {
- adaptToPreferenceChange(new PropertyChangeEvent(event.getSource(), event.getProperty(), event.getOldValue(), event.getNewValue()));
- }
+ public void propertyChange(Preferences.PropertyChangeEvent event) {
+ adaptToPreferenceChange(new PropertyChangeEvent(event.getSource(), event.getProperty(), event.getOldValue(), event.getNewValue()));
+ }
}
/** The color manager */
@@ -64,57 +73,60 @@ public class CTextTools {
/** The preference store */
private IPreferenceStore fPreferenceStore;
- /** The core preference store */
- private Preferences fCorePreferenceStore;
+ /** The core preference store */
+ private Preferences fCorePreferenceStore;
/** The preference change listener */
private PreferenceListener fPreferenceListener= new PreferenceListener();
/** The document partitioning used for the C partitioner */
private String fDocumentPartitioning = ICPartitions.C_PARTITIONING;
-
- /**
- * Creates a new C text tools collection and eagerly creates
- * and initializes all members of this collection.
- */
- public CTextTools(IPreferenceStore store) {
- this(store, null, true);
- }
-
- /**
- * Creates a new C text tools collection and eagerly creates
- * and initializes all members of this collection.
- */
- public CTextTools(IPreferenceStore store, Preferences coreStore) {
- this(store, coreStore, true);
- }
-
- /**
- * Creates a new C text tools collection and eagerly creates
- * and initializes all members of this collection.
- */
- public CTextTools(IPreferenceStore store, Preferences coreStore, boolean autoDisposeOnDisplayDispose) {
- if(store == null) {
- store = CUIPlugin.getDefault().getPreferenceStore();
- }
- fColorManager= new CColorManager(autoDisposeOnDisplayDispose);
- fCodeScanner= new CCodeScanner(fColorManager, store, GCCLanguage.getDefault());
- fCppCodeScanner= new CCodeScanner(fColorManager, store, GPPLanguage.getDefault());
-
- fMultilineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_MULTI_LINE_COMMENT);
- fSinglelineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
- fStringScanner= new SingleTokenCScanner(fColorManager, store, ICColorConstants.C_STRING);
- fCPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, GCCLanguage.getDefault());
- fCppPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, GPPLanguage.getDefault());
- fPreferenceStore = store;
- fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
-
- fCorePreferenceStore= coreStore;
- if (fCorePreferenceStore != null) {
- fCorePreferenceStore.addPropertyChangeListener(fPreferenceListener);
- }
-
+ /**
+ * Creates a new C text tools collection and eagerly creates
+ * and initializes all members of this collection.
+ */
+ public CTextTools(IPreferenceStore store) {
+ this(store, null, true);
}
-
+
+ /**
+ * Creates a new C text tools collection and eagerly creates
+ * and initializes all members of this collection.
+ */
+ public CTextTools(IPreferenceStore store, Preferences coreStore) {
+ this(store, coreStore, true);
+ }
+
+ /**
+ * Creates a new C text tools collection and eagerly creates
+ * and initializes all members of this collection.
+ */
+ public CTextTools(IPreferenceStore store, Preferences coreStore, boolean autoDisposeOnDisplayDispose) {
+ fPreferenceStore = store != null ? store : CUIPlugin.getDefault().getPreferenceStore();
+ fColorManager= new CColorManager(autoDisposeOnDisplayDispose);
+
+ ITokenStoreFactory factory= new ITokenStoreFactory() {
+ public ITokenStore createTokenStore(String[] propertyColorNames) {
+ return new TokenStore(getColorManager(), fPreferenceStore, propertyColorNames);
+ }
+ };
+
+ fMultilineCommentScanner= new CCommentScanner(factory, coreStore, ICColorConstants.C_MULTI_LINE_COMMENT);
+ fSinglelineCommentScanner= new CCommentScanner(factory, coreStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
+ fCodeScanner= new CCodeScanner(factory, GCCLanguage.getDefault());
+ fCppCodeScanner= new CCodeScanner(factory, GPPLanguage.getDefault());
+
+ fStringScanner= new SingleTokenCScanner(factory, ICColorConstants.C_STRING);
+ fCPreprocessorScanner= new CPreprocessorScanner(factory, GCCLanguage.getDefault());
+ fCppPreprocessorScanner= new CPreprocessorScanner(factory, GPPLanguage.getDefault());
+
+ fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
+
+ fCorePreferenceStore= coreStore;
+ if (fCorePreferenceStore != null) {
+ fCorePreferenceStore.addPropertyChangeListener(fPreferenceListener);
+ }
+ }
+
/**
* Creates a new C text tools collection and eagerly creates
* and initializes all members of this collection.
@@ -122,83 +134,75 @@ public class CTextTools {
public CTextTools() {
this((IPreferenceStore)null);
}
-
+
/**
* Disposes all members of this tools collection.
*/
public void dispose() {
-
+
fCodeScanner= null;
fMultilineCommentScanner= null;
fSinglelineCommentScanner= null;
fStringScanner= null;
-
+
if (fColorManager != null) {
fColorManager.dispose();
fColorManager= null;
}
-
+
if (fPreferenceStore != null) {
fPreferenceStore.removePropertyChangeListener(fPreferenceListener);
fPreferenceStore= null;
-
- if (fCorePreferenceStore != null) {
- fCorePreferenceStore.removePropertyChangeListener(fPreferenceListener);
- fCorePreferenceStore= null;
- }
-
+
+ if (fCorePreferenceStore != null) {
+ fCorePreferenceStore.removePropertyChangeListener(fPreferenceListener);
+ fCorePreferenceStore= null;
+ }
+
fPreferenceListener= null;
}
}
-
+
/**
* Gets the color manager.
*/
public CColorManager getColorManager() {
return fColorManager;
}
-
+
/**
* Gets the code scanner used.
*/
public RuleBasedScanner getCCodeScanner() {
return fCodeScanner;
}
-
+
/**
* Gets the code scanner used.
*/
public RuleBasedScanner getCppCodeScanner() {
return fCppCodeScanner;
}
-
+
/**
* Returns a scanner which is configured to scan
* C-specific partitions, which are multi-line comments,
* and regular C source code.
*
+ * @param owner may be null
* @return a C partition scanner
*/
- public IPartitionTokenScanner getPartitionScanner() {
- return new FastCPartitionScanner();
+ public IPartitionTokenScanner getPartitionScanner(IDocCommentOwner owner) {
+ return new FastCPartitionScanner(owner);
}
-
+
/**
* Gets the document provider used.
*/
- public IDocumentPartitioner createDocumentPartitioner() {
-
- String[] types= new String[] {
- ICPartitions.C_MULTI_LINE_COMMENT,
- ICPartitions.C_SINGLE_LINE_COMMENT,
- ICPartitions.C_STRING,
- ICPartitions.C_CHARACTER,
- ICPartitions.C_PREPROCESSOR
- };
-
- return new FastCPartitioner(getPartitionScanner(), types);
+ public IDocumentPartitioner createDocumentPartitioner(IDocCommentOwner owner) {
+ return new FastCPartitioner(getPartitionScanner(owner), ICPartitions.ALL_CPARTITIONS);
}
-
+
/**
* Returns a scanner which is configured to scan C multiline comments.
*
@@ -216,7 +220,7 @@ public class CTextTools {
public RuleBasedScanner getSinglelineCommentScanner() {
return fSinglelineCommentScanner;
}
-
+
/**
* Returns a scanner which is configured to scan C strings.
*
@@ -243,7 +247,7 @@ public class CTextTools {
public RuleBasedScanner getCppPreprocessorScanner() {
return fCppPreprocessorScanner;
}
-
+
/**
* Determines whether the preference change encoded by the given event
* changes the behavior of one its contained components.
@@ -253,13 +257,13 @@ public class CTextTools {
*/
public boolean affectsBehavior(PropertyChangeEvent event) {
return fCodeScanner.affectsBehavior(event) ||
- fCppCodeScanner.affectsBehavior(event) ||
- fMultilineCommentScanner.affectsBehavior(event) ||
- fSinglelineCommentScanner.affectsBehavior(event) ||
- fStringScanner.affectsBehavior(event) ||
- fCPreprocessorScanner.affectsBehavior(event);
+ fCppCodeScanner.affectsBehavior(event) ||
+ fMultilineCommentScanner.affectsBehavior(event) ||
+ fSinglelineCommentScanner.affectsBehavior(event) ||
+ fStringScanner.affectsBehavior(event) ||
+ fCPreprocessorScanner.affectsBehavior(event);
}
-
+
/**
* Adapts the behavior of the contained components to the change
* encoded in the given event.
@@ -286,12 +290,13 @@ public class CTextTools {
/**
* Sets up the document partitioner for the given document for the given partitioning.
*
- * @param document the document to be set up
- * @param partitioning the document partitioning
- * @since 3.0
+ * @param document
+ * @param partitioning
+ * @param owner may be null
+ * @since 5.0
*/
- public void setupCDocumentPartitioner(IDocument document, String partitioning) {
- IDocumentPartitioner partitioner= createDocumentPartitioner();
+ public void setupCDocumentPartitioner(IDocument document, String partitioning, IDocCommentOwner owner) {
+ IDocumentPartitioner partitioner= createDocumentPartitioner(owner);
if (document instanceof IDocumentExtension3) {
IDocumentExtension3 extension3= (IDocumentExtension3) document;
extension3.setDocumentPartitioner(partitioning, partitioner);
@@ -300,7 +305,20 @@ public class CTextTools {
}
partitioner.connect(document);
}
-
+
+ /**
+ * Sets up the given document for the default partitioning.
+ *
+ * @param document the document to be set up
+ * @param location the path of the resource backing the document. May be null.
+ * @param locationKind the type of path specified above. May be null.
+ * @since 3.0
+ */
+ public void setupCDocument(IDocument document, IPath location, LocationKind locationKind) {
+ IDocCommentOwner owner= getDocumentationCommentOwner(location, locationKind);
+ setupCDocumentPartitioner(document, fDocumentPartitioning, owner);
+ }
+
/**
* Sets up the given document for the default partitioning.
*
@@ -308,7 +326,7 @@ public class CTextTools {
* @since 3.0
*/
public void setupCDocument(IDocument document) {
- setupCDocumentPartitioner(document, fDocumentPartitioning);
+ setupCDocumentPartitioner(document, fDocumentPartitioning, null);
}
/**
@@ -329,5 +347,19 @@ public class CTextTools {
public void setDocumentPartitioning(String documentPartitioning) {
fDocumentPartitioning = documentPartitioning;
}
-
+
+ /**
+ * @param location
+ * @param locationKind
+ * @return the documentation comment owner mapped to the specified location. If there is
+ * no mapping, or the location
/locationKind
is not available, the
+ * workspace default is returned.
+ */
+ private IDocCommentOwner getDocumentationCommentOwner(IPath location, LocationKind locationKind) {
+ if(location!=null && LocationKind.IFILE.equals(locationKind)) {
+ IFile file= ResourcesPlugin.getWorkspace().getRoot().getFile(location);
+ return DocCommentOwnerManager.getInstance().getCommentOwner(file);
+ }
+ return DocCommentOwnerManager.getInstance().getWorkspaceCommentOwner();
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitionScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitionScanner.java
index 48913933d4e..e3a5ef74109 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitionScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitionScanner.java
@@ -9,6 +9,7 @@
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
@@ -21,6 +22,7 @@ import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
/**
@@ -38,6 +40,8 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
private static final int PREPROCESSOR= 5;
private static final int PREPROCESSOR_MULTI_LINE_COMMENT= 6;
private static final int PREPROCESSOR_STRING= 7;
+ private static final int SINGLE_LINE_DOC_COMMENT= 8;
+ private static final int MULTI_LINE_DOC_COMMENT= 9;
// beginning of prefixes and postfixes
private static final int NONE= 0;
@@ -65,11 +69,14 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
private int fPrefixLength;
/** Indicate whether current char is first non-whitespace char on the line*/
private boolean fFirstCharOnLine= true;
-
+ /** An optional (possibly null) comment owner for detecting documentation-comments **/
+ private IDocCommentOwner fOwner;
+
// emulate CPartitionScanner
private final boolean fEmulate;
private int fCCodeOffset;
private int fCCodeLength;
+ private IDocument fDocument;
private final IToken[] fTokens= new IToken[] {
new Token(null),
@@ -80,14 +87,21 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
new Token(C_PREPROCESSOR),
new Token(C_MULTI_LINE_COMMENT),
new Token(C_PREPROCESSOR),
+ new Token(C_SINGLE_LINE_DOC_COMMENT),
+ new Token(C_MULTI_LINE_DOC_COMMENT)
};
- public FastCPartitionScanner(boolean emulate) {
+ public FastCPartitionScanner(boolean emulate, IDocCommentOwner owner) {
fEmulate= emulate;
+ fOwner= owner;
}
+ public FastCPartitionScanner(IDocCommentOwner owner) {
+ this(false, owner);
+ }
+
public FastCPartitionScanner() {
- this(false);
+ this(false, null);
}
/*
@@ -533,13 +547,18 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
}
private final IToken postFix(int state) {
+ return postFix(state, CCODE);
+ }
+
+ private final IToken postFix(int state, int newState) {
fTokenLength++;
fLast= NONE;
- fState= CCODE;
+ fState= newState;
fPrefixLength= 0;
- return fTokens[state];
+ return fTokens[interceptTokenState(state)];
}
+
private final IToken preFix(int state, int newState, int last, int prefixLength) {
// emulate CPartitionScanner
if (fEmulate && state == CCODE && (fTokenLength - getLastLength(fLast) > 0)) {
@@ -550,15 +569,14 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
fState= newState;
fPrefixLength= prefixLength;
fLast= last;
- return fTokens[state];
+ return fTokens[interceptTokenState(state)];
} else {
fTokenLength -= getLastLength(fLast);
fLast= last;
fPrefixLength= prefixLength;
- IToken token= fTokens[state];
fState= newState;
- return token;
+ return fTokens[interceptTokenState(state)];
}
}
@@ -581,7 +599,13 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
else if (contentType.equals(C_PREPROCESSOR))
return PREPROCESSOR;
-
+
+ else if (contentType.equals(C_SINGLE_LINE_DOC_COMMENT))
+ return SINGLE_LINE_COMMENT; // intentionally non-doc state: the state machine is doc-comment unaware
+
+ else if (contentType.equals(C_MULTI_LINE_DOC_COMMENT))
+ return MULTI_LINE_COMMENT; // intentionally non-doc state: the state machine is doc-comment unaware
+
else
return CCODE;
}
@@ -590,7 +614,7 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
* @see IPartitionTokenScanner#setPartialRange(IDocument, int, int, String, int)
*/
public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) {
-
+ fDocument= document;
fScanner.setRange(document, offset, length);
fTokenOffset= partitionOffset;
fTokenLength= 0;
@@ -622,7 +646,7 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
* @see ITokenScanner#setRange(IDocument, int, int)
*/
public void setRange(IDocument document, int offset, int length) {
-
+ fDocument= document;
fScanner.setRange(document, offset, length);
fTokenOffset= offset;
fTokenLength= 0;
@@ -658,4 +682,30 @@ public final class FastCPartitionScanner implements IPartitionTokenScanner, ICPa
return fTokenOffset;
}
+ private int interceptTokenState(int proposedTokenState) {
+ if(fOwner!=null) {
+ switch(proposedTokenState) {
+ case MULTI_LINE_COMMENT:
+ if(fOwner.getMultilineConfiguration().isDocumentationComment(fDocument, fTokenOffset, fTokenLength))
+ return MULTI_LINE_DOC_COMMENT;
+ break;
+
+ case SINGLE_LINE_COMMENT:
+ if(fOwner.getSinglelineConfiguration().isDocumentationComment(fDocument, fTokenOffset, fTokenLength))
+ return SINGLE_LINE_DOC_COMMENT;
+ break;
+
+ }
+ }
+ return proposedTokenState;
+ }
+
+ /**
+ * @return the DocCommentOwner associated with this partition scanner, or null
+ * if there is no owner.
+ * @since 5.0
+ */
+ public IDocCommentOwner getDocCommentOwner() {
+ return fOwner;
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitioner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitioner.java
index 8439d665db3..653d6e0ab1d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitioner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/FastCPartitioner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2007, 2008 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
@@ -16,6 +17,7 @@ import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.rules.IPartitionTokenScanner;
import org.eclipse.cdt.ui.text.ICPartitions;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
/**
* A slightly adapted FastPartitioner.
@@ -44,10 +46,30 @@ public class FastCPartitioner extends FastPartitioner {
if (fDocument.getChar(offset - 1) != '\n') {
return region;
}
+ } else if (ICPartitions.C_MULTI_LINE_DOC_COMMENT.equals(region.getType())) {
+ if (!fDocument.get(offset - 2, 2).equals("*/")) { //$NON-NLS-1$
+ return region;
+ }
+ } else if (ICPartitions.C_SINGLE_LINE_DOC_COMMENT.equals(region .getType())) {
+ if (fDocument.getChar(offset - 1) != '\n') {
+ return region;
+ }
}
} catch (BadLocationException exc) {
}
}
return super.getPartition(offset, preferOpenPartitions);
}
+
+ /**
+ * @return the DocCommentOwner associated with this partition scanner, or null
+ * if there is no owner.
+ * @since 5.0
+ */
+ public IDocCommentOwner getDocCommentOwner() {
+ if(fScanner instanceof FastCPartitionScanner) {
+ return ((FastCPartitionScanner)fScanner).getDocCommentOwner();
+ }
+ return null;
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleTokenCScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleTokenCScanner.java
index 9313741b345..c79afdc63c5 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleTokenCScanner.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleTokenCScanner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 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
@@ -8,42 +8,36 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software System
+ * Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
import java.util.List;
-import org.eclipse.jface.preference.IPreferenceStore;
+
import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.Token;
+import org.eclipse.cdt.ui.text.ITokenStoreFactory;
/**
*
*/
-public final class SingleTokenCScanner extends AbstractCScanner{
-
+public final class SingleTokenCScanner extends AbstractCScanner {
+ private String fProperty;
+ private int position, end;
+ private int size;
protected IToken fDefaultReturnToken;
- private String[] fProperty;
- public SingleTokenCScanner(IColorManager manager, IPreferenceStore store, String property) {
- super(manager, store, 20);
- fProperty= new String[] { property };
- initialize();
+ public SingleTokenCScanner(ITokenStoreFactory factory, String property) {
+ super(factory.createTokenStore(new String[] {property}), 20);
+ fProperty= property;
+ setRules(createRules());
}
- /*
- * @see AbstractCScanner#getTokenProperties()
- */
- protected String[] getTokenProperties() {
- return fProperty;
- }
-
- /*
- * @see AbstractCScanner#createRules()
- */
- protected List createRules() {
- fDefaultReturnToken= getToken(fProperty[0]);
+ protected List createRules() {
+ fDefaultReturnToken= getToken(fProperty);
setDefaultReturnToken(fDefaultReturnToken);
return null;
}
@@ -51,9 +45,6 @@ public final class SingleTokenCScanner extends AbstractCScanner{
/**
* setRange -- sets the range to be scanned
*/
-
- private int position, end;
- private int size;
public void setRange(IDocument document, int offset, int length) {
super.setRange(document, offset, length);
@@ -61,13 +52,13 @@ public final class SingleTokenCScanner extends AbstractCScanner{
size = length;
end = offset + length;
}
+
/**
* Returns the next token in the document.
*
* @return the next token in the document
*/
public IToken nextToken() {
-
fTokenOffset = position;
if(position < end) {
@@ -81,30 +72,6 @@ public final class SingleTokenCScanner extends AbstractCScanner{
public int getTokenLength() {
return size;
}
-
- //public int getTokenOffset() {
- // return position;
- //}
- /* while (true) {
-
- fTokenOffset= fOffset;
- fColumn= UNDEFINED;
-
- if (fRules != null) {
- for (int i= 0; i < fRules.length; i++) {
- token= (fRules[i].evaluate(this));
- if (!token.isUndefined())
- return token;
- }
- }
-
- if (read() == EOF)
- return Token.EOF;
- else
- return fDefaultReturnToken;
- }
- } */
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/TokenStore.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/TokenStore.java
new file mode 100644
index 00000000000..9a97d8c31a2
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/TokenStore.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 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
+ * QNX Software System
+ * Andrew Ferguson (Symbian) - refactored to TokenStore (previously part of AbstractCScanner)
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.cdt.ui.text.ITokenStore;
+
+
+/**
+ * Maintains a pool of tokens identified by a String ID.
+ * Supports styles per token.
+ * Updates token instances on property changes.
+ */
+
+public class TokenStore implements ITokenStore {
+ private IColorManager fColorManager;
+ private IPreferenceStore fPreferenceStore;
+
+ private Map fTokenMap= new HashMap();
+ private String[] fPropertyNamesColor;
+
+ private boolean fNeedsLazyColorLoading;
+
+ /**
+ * Maintains tokens for a specified set of property keys. Automatically also
+ * copes with bold, italic, strike-through and underlined versions of the key.
+ * @param manager the IColorManager to retrieve token colors from
+ * @param store the {@link IPreferenceStore} to fetch property preferences from
+ */
+ public TokenStore(IColorManager manager, IPreferenceStore store, String[] propertyNamesColor) {
+ fColorManager= manager;
+ fPreferenceStore= store;
+
+ fPropertyNamesColor= propertyNamesColor;
+
+ fNeedsLazyColorLoading= Display.getCurrent() == null;
+ for (int i= 0; i < fPropertyNamesColor.length; i++) {
+ if(fPropertyNamesColor[i].endsWith(PreferenceConstants.EDITOR_BOLD_SUFFIX)
+ || fPropertyNamesColor[i].endsWith(PreferenceConstants.EDITOR_ITALIC_SUFFIX)
+ || fPropertyNamesColor[i].endsWith(PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX)
+ || fPropertyNamesColor[i].endsWith(PreferenceConstants.EDITOR_UNDERLINE_SUFFIX)) {
+ throw new IllegalArgumentException(); // XXX
+ }
+ if (fNeedsLazyColorLoading)
+ addTokenWithProxyAttribute(fPropertyNamesColor[i]);
+ else
+ addToken(fPropertyNamesColor[i]);
+ }
+ }
+
+ /**
+ * In the case where at the time of IToken construction, the Display was not
+ * ready to construct colors.
+ */
+ public void ensureTokensInitialised() {
+ if (fNeedsLazyColorLoading && Display.getCurrent() != null) {
+ for (int i= 0; i < fPropertyNamesColor.length; i++) {
+ addToken(fPropertyNamesColor[i]);
+ }
+ fNeedsLazyColorLoading= false;
+ }
+ }
+
+ private void addTokenWithProxyAttribute(String colorKey) {
+ fTokenMap.put(colorKey, new Token(createTextAttribute(colorKey, true)));
+ }
+
+ private void addToken(String colorKey) {
+ if (fColorManager != null && colorKey != null && fColorManager.getColor(colorKey) == null) {
+ RGB rgb= PreferenceConverter.getColor(fPreferenceStore, colorKey);
+ if (fColorManager instanceof IColorManagerExtension) {
+ IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
+ ext.unbindColor(colorKey);
+ ext.bindColor(colorKey, rgb);
+ }
+ }
+
+ if (!fNeedsLazyColorLoading)
+ fTokenMap.put(colorKey, new Token(createTextAttribute(colorKey, false)));
+ else {
+ Token token= ((Token)fTokenMap.get(colorKey));
+ if (token != null)
+ token.setData(createTextAttribute(colorKey, false));
+ }
+ }
+
+ /**
+ * Create a text attribute based on the given color, bold, italic, strikethrough and underline preference keys.
+ *
+ * @param colorKey the color preference key
+ * @param boldKey the bold preference key
+ * @param italicKey the italic preference key
+ * @param strikethroughKey the strikethrough preference key
+ * @param underlineKey the italic preference key
+ * @return the created text attribute
+ * @since 3.0
+ */
+ private TextAttribute createTextAttribute(String colorKey, boolean isNull) {
+ Color color= null;
+ if (!isNull)
+ color= fColorManager.getColor(colorKey);
+
+ String boldKey= colorKey + PreferenceConstants.EDITOR_BOLD_SUFFIX;
+ String italicKey= colorKey + PreferenceConstants.EDITOR_ITALIC_SUFFIX;
+ String strikethroughKey= colorKey + PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX;
+ String underlineKey= colorKey + PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
+
+ int style= fPreferenceStore.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
+ if (fPreferenceStore.getBoolean(italicKey))
+ style |= SWT.ITALIC;
+
+ if (fPreferenceStore.getBoolean(strikethroughKey))
+ style |= TextAttribute.STRIKETHROUGH;
+
+ if (fPreferenceStore.getBoolean(underlineKey))
+ style |= TextAttribute.UNDERLINE;
+
+ return new TextAttribute(color, null, style);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.text.ITokenStore#getToken(java.lang.String)
+ */
+ public IToken getToken(String key) {
+ return getTokenInner(key);
+ }
+
+ private Token getTokenInner(String key) {
+ ensureTokensInitialised();
+ return (Token) fTokenMap.get(key);
+ }
+
+ private int indexOf(String property) {
+ if (property != null) {
+ int length= fPropertyNamesColor.length;
+ for (int i= 0; i < length; i++) {
+ if (property.startsWith(fPropertyNamesColor[i])) {
+ int pLength= property.length();
+ if(fPropertyNamesColor[i].length() < pLength) {
+ String end= property.substring(fPropertyNamesColor[i].length());
+ if (end.equals(PreferenceConstants.EDITOR_BOLD_SUFFIX)
+ || end.equals(PreferenceConstants.EDITOR_ITALIC_SUFFIX)
+ || end.equals(PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX)
+ || end.equals(PreferenceConstants.EDITOR_UNDERLINE_SUFFIX)) {
+ return i;
+ }
+ } else if (fPropertyNamesColor[i].equals(property)) {
+ return i;
+ }
+ }
+ }
+ }
+ return -1;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.IPropertyChangeParticipant#affectsBehavior(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public boolean affectsBehavior(PropertyChangeEvent event) {
+ return indexOf(event.getProperty()) >= 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.cdt.ui.IPropertyChangeParticipant#adaptToPreferenceChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void adaptToPreferenceChange(PropertyChangeEvent event) {
+ String property= event.getProperty();
+ int i= indexOf(property);
+ if (property.startsWith(fPropertyNamesColor[i])) {
+ Token token= getTokenInner(fPropertyNamesColor[i]);
+ if(property.length() == fPropertyNamesColor[i].length()) {
+ adaptToColorChange(token, event);
+ } else {
+ String end= property.substring(fPropertyNamesColor[i].length());
+ if (end.equals(PreferenceConstants.EDITOR_BOLD_SUFFIX)) {
+ adaptToStyleChange(token, event, SWT.BOLD);
+ } else if (end.equals(PreferenceConstants.EDITOR_ITALIC_SUFFIX)) {
+ adaptToStyleChange(token, event, SWT.ITALIC);
+ } else if (end.equals(PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX)) {
+ adaptToStyleChange(token, event, TextAttribute.STRIKETHROUGH);
+ } else if (end.equals(PreferenceConstants.EDITOR_UNDERLINE_SUFFIX)) {
+ adaptToStyleChange(token, event, TextAttribute.UNDERLINE);
+ }
+ }
+ }
+ }
+
+ private void adaptToColorChange(Token token, PropertyChangeEvent event) {
+ RGB rgb= null;
+
+ Object value= event.getNewValue();
+ if (value instanceof RGB)
+ rgb= (RGB) value;
+ else if (value instanceof String)
+ rgb= StringConverter.asRGB((String) value);
+
+ if (rgb != null) {
+
+ String property= event.getProperty();
+ Color color= fColorManager.getColor(property);
+
+ if ((color == null || !rgb.equals(color.getRGB())) && fColorManager instanceof IColorManagerExtension) {
+ IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
+
+ ext.unbindColor(property);
+ ext.bindColor(property, rgb);
+
+ color= fColorManager.getColor(property);
+ }
+
+ Object data= token.getData();
+ if (data instanceof TextAttribute) {
+ TextAttribute oldAttr= (TextAttribute) data;
+ token.setData(new TextAttribute(color, oldAttr.getBackground(), oldAttr.getStyle()));
+ }
+ }
+ }
+
+ private void adaptToStyleChange(Token token, PropertyChangeEvent event, int styleAttribute) {
+ boolean eventValue= false;
+ Object value= event.getNewValue();
+ if (value instanceof Boolean)
+ eventValue= ((Boolean) value).booleanValue();
+ else if (IPreferenceStore.TRUE.equals(value))
+ eventValue= true;
+
+ Object data= token.getData();
+ if (data instanceof TextAttribute) {
+ TextAttribute oldAttr= (TextAttribute) data;
+ boolean activeValue= (oldAttr.getStyle() & styleAttribute) == styleAttribute;
+ if (activeValue != eventValue)
+ token.setData(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(), eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
+ }
+ }
+
+ /**
+ * Returns the preference store.
+ *
+ * @return the preference store.
+ *
+ * @since 3.0
+ */
+ public IPreferenceStore getPreferenceStore() {
+ return fPreferenceStore;
+ }
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/AbstractDocCommentProposalComputer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/AbstractDocCommentProposalComputer.java
new file mode 100644
index 00000000000..60fe0c0cc90
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/AbstractDocCommentProposalComputer.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text.doctools;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.IWorkingCopyManager;
+import org.eclipse.cdt.ui.text.contentassist.ContentAssistInvocationContext;
+import org.eclipse.cdt.ui.text.contentassist.ICompletionProposalComputer;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
+
+
+abstract class AbstractDocCommentProposalComputer implements ICompletionProposalComputer {
+
+ protected abstract IDocCommentViewerConfiguration getConfiguration(IDocCommentOwner owner);
+
+ protected final IDocCommentViewerConfiguration getConfiguration() {
+ IResource resource= getResource();
+ IDocCommentOwner owner= DocCommentOwnerManager.getInstance().getCommentOwner(resource);
+ return getConfiguration(owner);
+ }
+
+ public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+ return getConfiguration().createProposalComputer().computeCompletionProposals(context, monitor);
+ }
+
+ public List computeContextInformation(
+ ContentAssistInvocationContext context, IProgressMonitor monitor) {
+ return getConfiguration().createProposalComputer().computeContextInformation(context, monitor);
+ }
+
+ public String getErrorMessage() {
+ return getConfiguration().createProposalComputer().getErrorMessage();
+ }
+
+ public void sessionEnded() {
+ // XXX
+ }
+
+ public void sessionStarted() {
+ // XXX
+ }
+
+
+ private static IResource getResource() {
+ ITranslationUnit tu= getTranslationUnit();
+ return tu.getResource();
+ }
+
+ private static ITranslationUnit getTranslationUnit() {
+ IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window == null)
+ return null;
+
+ IWorkbenchPage page= window.getActivePage();
+ if (page == null)
+ return null;
+
+ IEditorPart editor= page.getActiveEditor();
+ if (editor == null)
+ return null;
+
+ IWorkingCopyManager manager= CUIPlugin.getDefault().getWorkingCopyManager();
+ ITranslationUnit unit= manager.getWorkingCopy(editor.getEditorInput());
+ if (unit == null)
+ return null;
+
+ return unit;
+ }
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentMultilineProposalComputer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentMultilineProposalComputer.java
new file mode 100644
index 00000000000..17cc0dfc67e
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentMultilineProposalComputer.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text.doctools;
+
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
+
+public class DocCommentMultilineProposalComputer extends AbstractDocCommentProposalComputer {
+ protected IDocCommentViewerConfiguration getConfiguration(IDocCommentOwner owner) {
+ return owner.getMultilineConfiguration();
+ }
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwner.java
new file mode 100644
index 00000000000..1369c23e672
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwner.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text.doctools;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
+
+/**
+ * Internal implementation of IDocCommentOwner
+ */
+public class DocCommentOwner implements IDocCommentOwner {
+ private final String id;
+ private final String name;
+ private final IDocCommentViewerConfiguration multi, single;
+
+ public DocCommentOwner(String id, String name, IDocCommentViewerConfiguration multi, IDocCommentViewerConfiguration single) {
+ Assert.isNotNull(id); Assert.isNotNull(name); Assert.isNotNull(multi); Assert.isNotNull(single);
+ this.id= id;
+ this.name= name;
+ this.multi= multi;
+ this.single= single;
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.text.ICCommentOwner#getID()
+ */
+ public String getID() {
+ return id;
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.text.ICCommentOwner#getName()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.text.ICCommentOwner#getMultilineConfiguration()
+ */
+ public IDocCommentViewerConfiguration getMultilineConfiguration() {
+ return multi;
+ }
+
+ /*
+ * @see org.eclipse.cdt.ui.text.ICCommentOwner#getSinglelineConfiguration()
+ */
+ public IDocCommentViewerConfiguration getSinglelineConfiguration() {
+ return single;
+ }
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwnerManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwnerManager.java
new file mode 100644
index 00000000000..f4c90c2c792
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DocCommentOwnerManager.java
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Symbian 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:
+ * Andrew Ferguson (Symbian) - Initial implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.text.doctools;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.Preferences;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentOwnershipListener;
+import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
+
+/**
+ * This class manages which IDocCommentOwner's are available in the run-time, and how they map to resources
+ * in projects.
+ * @since 5.0
+ */
+public class DocCommentOwnerManager {
+ /** Constants for attributes/elements from the DocCommentOwner extension point */
+ private static final String ELEMENT_OWNER = "owner"; //$NON-NLS-1$
+ private static final String ATTRKEY_OWNER_ID = "id"; //$NON-NLS-1$
+ private static final String ATTRKEY_OWNER_NAME = "name"; //$NON-NLS-1$
+ private static final String ATTRKEY_OWNER_SINGLELINE = "singleline"; //$NON-NLS-1$
+ private static final String ATTRKEY_OWNER_MULTILINE = "multiline"; //$NON-NLS-1$
+
+ private static final String QUALIFIER= CCorePlugin.PLUGIN_ID;
+ private static final String WORKSPACE_DOC_TOOL_NODE= "doctool"; //$NON-NLS-1$
+ private static final String PREFKEY_WORKSPACE_DEFAULT= "workspace.default"; //$NON-NLS-1$
+
+ private static DocCommentOwnerManager singleton;
+
+ public static DocCommentOwnerManager getInstance() {
+ return singleton==null ? singleton= new DocCommentOwnerManager() : singleton;
+ }
+
+ private Map fOwners;
+ private IDocCommentOwner fWorkspaceOwner;
+ private Map prj2map= new HashMap();
+ private static List fListeners;
+
+ private DocCommentOwnerManager() {
+ fOwners= getCommentOwnerExtensions();
+ fListeners= new ArrayList();
+
+ Preferences prefs= new InstanceScope().getNode(QUALIFIER).node(WORKSPACE_DOC_TOOL_NODE);
+ String id= prefs.get(PREFKEY_WORKSPACE_DEFAULT, NullDocCommentOwner.INSTANCE.getID());
+ fWorkspaceOwner= getOwner(id);
+ if(fWorkspaceOwner == null) {
+ // this could occur if a plug-in is no longer available
+ fWorkspaceOwner= NullDocCommentOwner.INSTANCE;
+ }
+ }
+
+ /**
+ * @param project a non-null project
+ * @return whether the specified project defines any documentation owner association
+ */
+ public boolean projectDefinesOwnership(IProject project) {
+ return !getProjectMap(project).isEmpty();
+ }
+
+ /**
+ * @param owner the non-null doc-comment owner
+ */
+ public void setWorkspaceCommentOwner(IDocCommentOwner owner) {
+ if(owner == null)
+ throw new IllegalArgumentException();
+ IDocCommentOwner old= fWorkspaceOwner;
+ fWorkspaceOwner= owner;
+
+ Preferences prefs= new InstanceScope().getNode(QUALIFIER).node(WORKSPACE_DOC_TOOL_NODE);
+ prefs.put(PREFKEY_WORKSPACE_DEFAULT, owner.getID());
+
+ fireWorkspaceOwnershipChanged(old, fWorkspaceOwner);
+ }
+
+ /**
+ * @return the doc comment owner associated with the workspace. If non
+ * is set, the {@link NullDocCommentOwner} is returned.
+ */
+ public IDocCommentOwner getWorkspaceCommentOwner() {
+ return fWorkspaceOwner;
+ }
+
+ /**
+ *
+ * @param resource May be null.
+ * @return a non-null IDocCommentOwner. If the resource was null, the {@link NullDocCommentOwner} is returned.
+ */
+ public IDocCommentOwner getCommentOwner(IResource resource) {
+ if(resource==null)
+ return NullDocCommentOwner.INSTANCE;
+
+ if(ResourcesPlugin.getWorkspace().getRoot().equals(resource))
+ return getWorkspaceCommentOwner();
+
+ ProjectMap pm= getProjectMap(resource);
+ String ownerID= pm.getOwnerID(resource);
+ IDocCommentOwner result= getOwner(ownerID);
+ return result == null ? fWorkspaceOwner : result;
+ }
+
+ /**
+ * @param id
+ * @return the {@link IDocCommentOwner} with the specified id, or null
+ */
+ public IDocCommentOwner getOwner(String id) {
+ if(NullDocCommentOwner.INSTANCE.getID().equals(id)) {
+ return NullDocCommentOwner.INSTANCE;
+ }
+ return fOwners.get(id);
+ }
+
+ /**
+ * @param resource a non-null resource to map a comment owner to
+ * @param owner the new owner to assign, or null to inherit the parent's mapping
+ * @param removeSubMappings if the resource is an {@link IContainer}, then remove any mappings
+ * children have. This is currently unimplemented.
+ */
+ /*
+ * Note - this implementation currently ignores removeSubMappings.
+ */
+ public void setCommentOwner(IResource resource, IDocCommentOwner owner, boolean removeSubMappings) {
+ Assert.isNotNull(resource);
+
+ if(ResourcesPlugin.getWorkspace().getRoot().equals(resource)) {
+ setWorkspaceCommentOwner(owner);
+ return;
+ }
+
+ ProjectMap pm= getProjectMap(resource);
+ IDocCommentOwner old= getCommentOwner(resource);
+ pm.setCommentOwner(resource, owner);
+ IDocCommentOwner n3w= getCommentOwner(resource);
+ fireOwnershipChanged(resource, removeSubMappings, old, n3w);
+ }
+
+ /**
+ * @return any comment owners registered against the extension point. This does not include
+ * the null comment processor.
+ */
+ public IDocCommentOwner[] getRegisteredOwners() {
+ return fOwners.values().toArray(new IDocCommentOwner[fOwners.values().size()]);
+ }
+
+
+ /**
+ * @param listener registers a listener for doc-comment ownership events
+ */
+ public void addListener(IDocCommentOwnershipListener listener) {
+ if(!fListeners.contains(listener)) {
+ fListeners.add(listener);
+ }
+ }
+
+ /**
+ * @param listener removes a listener from those registered for doc-comment ownership events
+ */
+ public void removeListener(IDocCommentOwnershipListener listener) {
+ fListeners.add(listener);
+ }
+
+ /*
+ * Utilities
+ */
+
+ /**
+ * @param resource a non-null resource
+ * @return the cached (or newly obtained) ProjectMap for the resources
+ * associated project.
+ */
+ private ProjectMap getProjectMap(IResource resource) {
+ Assert.isNotNull(resource);
+ IProject project= resource.getProject();
+
+ if(!prj2map.containsKey(project)) {
+ prj2map.put(project, new ProjectMap(project));
+ }
+
+ return prj2map.get(project);
+ }
+
+ /**
+ * @return a map of ID to {@link IDocCommentOwner} for comment owners registered
+ * via the DocCommentOwner extension point
+ */
+ private static Map getCommentOwnerExtensions() {
+ Map result= new HashMap();
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint indexProviders = registry.getExtensionPoint(CUIPlugin.ID_COMMENT_OWNER);
+ IExtension[] extensions = indexProviders.getExtensions();
+ for(int i=0; i needReopening= new ArrayList();
+ if(window.getActivePage()!=null) {
+ IEditorReference[] es= window.getActivePage().getEditorReferences();
+ for(int i=0; i
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 797ef489c86..afc5a8a30e3 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
@@ -26,7 +26,7 @@
-Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
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 d3220094461..1f6adec41ac 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
@@ -70,7 +70,7 @@ Customizes the tools and tool options used in your build configuration.
Tool chain editor page
Variables page
-Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 ebf83053943..408ead9711a 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
@@ -74,7 +74,7 @@ Customizes the tools and tool options used in your build configuration.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 8bf609204bc..423dfdb9315 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
@@ -48,11 +48,11 @@
width="143" height="21">
-Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
- File Properties, C/C++ General category
+ File Properties, C/C++ General category
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 bcd99f3bca0..5a217e2571f 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
@@ -57,7 +57,7 @@ to handle configurations.
Tool chain editor page
Variables page
-Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 994e4a5cba1..5011d168722 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
@@ -178,7 +178,7 @@ and, moreover, change the visibility of other property pages.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 81f6dd80c2b..7176144791e 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
@@ -139,7 +139,7 @@ the entire project (configuration). This means that both the project and per-fil
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 0c16db82417..be7fdb1b6c1 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
@@ -109,7 +109,7 @@ Customizes the build environment for all projects in the workspace; it lets you
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 4acd619fb66..a93641d7ef3 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
@@ -80,7 +80,7 @@
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 0857cbda8f6..202fbb0c827 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
@@ -91,7 +91,7 @@ symbols of the object file using the C/C++ Projects view.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 0b3aa32efc1..ab51d815544 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
@@ -89,7 +89,7 @@ build output log.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 39aead4cf97..d65235ebbe2 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
@@ -105,7 +105,7 @@ including pre-build or post-build steps.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 1f3c79abc29..d74ba529af3 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
@@ -71,7 +71,7 @@ Customizes the tools and tool options used in your build configuration.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 311d6423b49..9c412b84c0f 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
@@ -75,7 +75,7 @@ you specify which tools the builder needs to include when it builds the project
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 2940de00ef9..21b9eba2430 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
@@ -91,7 +91,7 @@ you control the environment variables used by the build to for the purposes of b
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 b913d80cbb2..c82110a58f5 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
@@ -88,7 +88,7 @@ which order they are used.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 741112738dd..aa03b11dde4 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
@@ -50,7 +50,7 @@ Selected configuration would not be made Active configuration (used to build pro
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 54839ba0947..44577384b83 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
@@ -49,7 +49,7 @@
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 1cff61576a5..63d44ec08f0 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
@@ -67,7 +67,7 @@ There are 2 ways to make value exported:
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 6464bd2b8cc..a9d844858ec 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
@@ -56,7 +56,7 @@ disables indexing. Every indexer may have its own set of options.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 8a667592f73..d6783d354a7 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
@@ -32,7 +32,7 @@
-File Properties, C/C++ General category
+ File Properties, C/C++ General category
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 d254930c49b..46ffc240925 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
@@ -59,7 +59,7 @@ width="143" height="21">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 99c367fe6a4..97ba211b2c9 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
@@ -69,7 +69,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Includes">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 ae52fa0fbec..55926be96c8 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
@@ -65,7 +65,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Libraries">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 b50fd4df156..482f36cf84e 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
@@ -66,7 +66,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Library paths">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 623d1edfe60..0d815a23ced 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
@@ -57,7 +57,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Output location">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 45ae16f936c..b16c12e9de6 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
@@ -59,7 +59,7 @@ current page allows setting references to specific configuration.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 961194279a0..8b93e640d5b 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
@@ -56,7 +56,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Source location">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 c4d84e26517..4b2a617414c 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
@@ -64,7 +64,7 @@ alt="C/C++ Project Properties, Paths and Symbols, Symbols">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 bbff82ac27b..7bb1ba6d92e 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
@@ -53,7 +53,7 @@ of specific file types.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 d3b275c1216..416209f5988 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
@@ -59,7 +59,7 @@ alt="C/C++ Project Properties, Manage Configuration Dialog">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 6af649997a7..df80ea9b318 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
@@ -54,7 +54,7 @@ alt="C/C++ Project Properties, New Configuration Dialog">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 7b01b998885..7090addb31f 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
@@ -49,7 +49,7 @@ alt="C/C++ Project Properties, Rename Configuration Dialog">
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 6dc517ddee6..0680c81063e 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
@@ -44,7 +44,7 @@
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 d0fe3dfe042..2a27aeb4f19 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
@@ -52,7 +52,7 @@ Group by Date: Refactorings are grouped by date. The refactoring history dialog
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 4538f458a10..45dea0035b7 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
@@ -91,7 +91,7 @@
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
File Types page
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 5803793f4e8..e21e6566a4a 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
@@ -46,7 +46,7 @@ Run/Debug settings are mostly applicable to Java projects, not to CDT ones.
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category
Documentation page
Export Settings page
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 6522afd63fa..33190a38851 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
@@ -47,7 +47,7 @@ To select object properties, right click on object in view and select Propert
Tool chain editor page
Variables page
- Project Properties, C/C++ General category
+ Project Properties, C/C++ General category