package org.marketcetera.photon.java.internal; import org.eclipse.core.filebuffers.IDocumentSetupParticipant; import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner; import org.eclipse.jdt.ui.text.IJavaPartitions; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentExtension3; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.rules.IPartitionTokenScanner; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * The document setup participant for {@link JavaEditor}. Based on * org.eclipse.jdt.internal.ui.javaeditor.JavaDocumentSetupParticipant. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: JavaDocumentSetupParticipant.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: JavaDocumentSetupParticipant.java 16154 2012-07-14 16:34:05Z colin $") public class JavaDocumentSetupParticipant implements IDocumentSetupParticipant { @Override public void setup(IDocument document) { setupJavaDocumentPartitioner(document, IJavaPartitions.JAVA_PARTITIONING); } /** * Sets up the Java document partitioner for the given document for the * given partitioning. * * @param document * the document to be set up * @param partitioning * the document partitioning */ public void setupJavaDocumentPartitioner(IDocument document, String partitioning) { IDocumentPartitioner partitioner = createDocumentPartitioner(); if (document instanceof IDocumentExtension3) { IDocumentExtension3 extension3 = (IDocumentExtension3) document; extension3.setDocumentPartitioner(partitioning, partitioner); } else { document.setDocumentPartitioner(partitioner); } partitioner.connect(document); } /** * Array with legal content types. */ private final static String[] LEGAL_CONTENT_TYPES = new String[] { IJavaPartitions.JAVA_DOC, IJavaPartitions.JAVA_MULTI_LINE_COMMENT, IJavaPartitions.JAVA_SINGLE_LINE_COMMENT, IJavaPartitions.JAVA_STRING, IJavaPartitions.JAVA_CHARACTER }; /** * Factory method for creating a Java-specific document partitioner using * this object's partitions scanner. This method is a convenience method. * * @return a newly created Java document partitioner */ public IDocumentPartitioner createDocumentPartitioner() { return new FastPartitioner(getPartitionScanner(), LEGAL_CONTENT_TYPES); } /** * Returns a scanner which is configured to scan Java-specific partitions, * which are multi-line comments, Javadoc comments, and regular Java source * code. * * @return a Java partition scanner */ public IPartitionTokenScanner getPartitionScanner() { return new FastJavaPartitionScanner(); } }