diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPartitionScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPartitionScanner.java index 196ed1b5e8e..dc566f237bd 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPartitionScanner.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CPartitionScanner.java @@ -8,20 +8,22 @@ package org.eclipse.cdt.internal.ui.text; import java.util.ArrayList; import java.util.List; - -import org.eclipse.jface.text.rules.BufferedRuleBasedScanner; import org.eclipse.jface.text.rules.EndOfLineRule; -import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.ICharacterScanner; +import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.IWordDetector; +import org.eclipse.jface.text.rules.MultiLineRule; +import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.Token; +import org.eclipse.jface.text.rules.WordRule; /** * This scanner recognizes comments */ -public class CPartitionScanner extends BufferedRuleBasedScanner { +public class CPartitionScanner extends RuleBasedPartitionScanner { private final static String SKIP= "__skip"; @@ -37,16 +39,14 @@ public class CPartitionScanner extends BufferedRuleBasedScanner { */ static class EmptyCommentDetector implements IWordDetector { - - /** + /* * @see IWordDetector#isWordStart */ public boolean isWordStart(char c) { return (c == '/'); } - - /** + /* * @see IWordDetector#isWordPart */ public boolean isWordPart(char c) { @@ -54,13 +54,42 @@ public class CPartitionScanner extends BufferedRuleBasedScanner { } }; + /** + * Word rule for empty comments. + */ + static class EmptyCommentRule extends WordRule implements IPredicateRule { + + private IToken fSuccessToken; + /** + * Constructor for EmptyCommentRule. + * @param defaultToken + */ + public EmptyCommentRule(IToken successToken) { + super(new EmptyCommentDetector()); + fSuccessToken= successToken; + addWord("/**/", fSuccessToken); //$NON-NLS-1$ + } + + /* + * @see IPredicateRule#evaluate(ICharacterScanner, boolean) + */ + public IToken evaluate(ICharacterScanner scanner, boolean resume) { + return evaluate(scanner); + } + /* + * @see IPredicateRule#getSuccessToken() + */ + public IToken getSuccessToken() { + return fSuccessToken; + } + }; + /** * Creates the partitioner and sets up the appropriate rules. */ public CPartitionScanner() { - // Set buffer size to 1k - super(1000); + super(); IToken comment= new Token(C_MULTILINE_COMMENT); IToken single_comment= new Token(C_SINGLE_LINE_COMMENT); @@ -84,19 +113,17 @@ public class CPartitionScanner extends BufferedRuleBasedScanner { rules.add(new SingleLineRule("\"", "\"", string, '\\')); rules.add(new SingleLineRule("'", "'", skip, '\\')); - // Add special case word rule. - //WordRule wordRule= new WordRule(new EmptyCommentDetector()); - //wordRule.addWord("/**/", comment); - //rules.add(wordRule); + EmptyCommentRule wordRule= new EmptyCommentRule(comment); + rules.add(wordRule); // Add rules for multi-line comments. - //rules.add(new MultiLineRule("/*", "*/", comment)); - rules.add(new CMultilineCommentScanner(comment, (char)0, false)); + rules.add(new MultiLineRule("/*", "*/", comment)); + //rules.add(new CMultilineCommentScanner(comment, (char)0, false)); - IRule[] result= new IRule[rules.size()]; + IPredicateRule[] result= new IPredicateRule[rules.size()]; rules.toArray(result); - setRules(result); + setPredicateRules(result); } } 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 5050901c6b1..98cee03ee08 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 @@ -27,7 +27,9 @@ import org.eclipse.jface.text.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.reconciler.IReconciler; import org.eclipse.jface.text.reconciler.Reconciler; +import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.rules.DefaultPartitioner; +import org.eclipse.jface.text.rules.RuleBasedDamagerRepairer; import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.source.IAnnotationHover; import org.eclipse.jface.text.source.ISourceViewer; @@ -37,7 +39,6 @@ import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.cdt.internal.ui.CPlugin; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.editor.CEditorTextHoverDispatcher; -import org.eclipse.cdt.internal.ui.text.eclipse2.CRuleBasedDamagerRepairer; import org.eclipse.cdt.ui.ICDTConstants; @@ -134,22 +135,22 @@ public class CSourceViewerConfiguration extends SourceViewerConfiguration { scanner= fTextTools.getCCodeScanner(); } - CRuleBasedDamagerRepairer dr= new CRuleBasedDamagerRepairer(scanner); + DefaultDamagerRepairer dr= new DefaultDamagerRepairer(scanner); 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 CRuleBasedDamagerRepairer(getSinglelineCommentScanner()); + dr= new DefaultDamagerRepairer(getSinglelineCommentScanner()); reconciler.setDamager(dr, CPartitionScanner.C_SINGLE_LINE_COMMENT); reconciler.setRepairer(dr, CPartitionScanner.C_SINGLE_LINE_COMMENT); - dr= new CRuleBasedDamagerRepairer(getStringScanner()); + dr= new DefaultDamagerRepairer(getStringScanner()); reconciler.setDamager(dr, CPartitionScanner.C_STRING); reconciler.setRepairer(dr, CPartitionScanner.C_STRING); - dr= new CRuleBasedDamagerRepairer(getMultilineCommentScanner()); + dr= new DefaultDamagerRepairer(getMultilineCommentScanner()); reconciler.setDamager(dr, CPartitionScanner.C_MULTILINE_COMMENT); reconciler.setRepairer(dr, CPartitionScanner.C_MULTILINE_COMMENT);