Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÅØ½ºÆ®ÀÇ ¹®¼ ¸ðµ¨À» Á¤ÀÇÇϰí ÀÌ ¸ðµ¨À» »ç¿ëÇÏ¿© ÅØ½ºÆ®¸¦ Ç¥½ÃÇϴ ǥ½Ã±â¸¦ Á¦°øÇÕ´Ï´Ù. Java ÆíÁý±â ¿¹Á¦ ¹× ÀÌ ¸ðµ¨¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸´Â °ÍÀ¸·Î ½ÃÀÛÇÕ´Ï´Ù. org.eclipse.ui.editors¸¦ ³íÇÑ Àý¿¡¼ ÀÌ¹Ì »ìÆìº¸¾ÒÀ¸¹Ç·Î, ÆíÁý±â È®ÀåÀ» µî·ÏÇÏ´Â ±âº» ±â¼ú¿¡ ´ëÇØ¼´Â ´Ù·çÁö ¾Ê°Ú½À´Ï´Ù. ´ë½Å, ¿¹Á¦¿¡¼ ÆíÁý±â Ŭ·¡½º°¡ ±¸ÇöµÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×À» »ìÆìº¸°Ú½À´Ï´Ù.
Workbench¿¡¼´Â, »ç¿ëÀÚ°¡ µµ¸ÞÀÎ ¿ä¼Ò(¿¹: ÆÄÀÏ ¶Ç´Â ¾ÆÄ«ÀÌºê ÆÄÀÏ¿¡ ÀúÀåµÈ ¿ä¼Ò)¸¦ ¼±ÅÃÇϰí ÀÌ ¿ä¼Ò¸¦ ¿¸é ÀϹÝÀûÀ¸·Î ÆíÁý±â°¡ ¿¸³´Ï´Ù. ÆíÁý±â ÀÛ¼º ½Ã ÀÌ ÆíÁý±â´Â ÆíÁý ÁßÀÎ ¿ÀºêÁ§Æ®¸¦ ¼³¸íÇÏ´Â ÆíÁý±â ÀÔ·Â(IEditorInput)°ú ¿¬°üµË´Ï´Ù.
"*.jav" È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ¿ ¶§ Java ÆíÁý±â ¿¹Á¦°¡ ¿¸³´Ï´Ù. ÀÌ·± °æ¿ì ÆíÁý±âÀÇ ÀÔ·ÂÀº IFileEditorInputÀÔ´Ï´Ù. Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÆíÁý±â ÀÔ·Â ÀÚü¿¡ ´ëÇØ¼´Â °ÅÀÇ °í·ÁÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ÇÁ·¹ÀÓ¿öÅ©´Â È¿À²ÀûÀ¸·Î ÅØ½ºÆ®¸¦ Ç¥½ÃÇϰí Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï IDocument¶ó°í ÇÏ´Â ÀÔ·ÂÀÇ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨°ú ÇÔ²² ÀÛµ¿ÇÕ´Ï´Ù.
Áï, ¿¹»óµÈ µµ¸ÞÀÎ ¸ðµ¨(ÆíÁý±â ÀÔ·Â)¿¡¼ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨·Î ¸ÊÇÎÇÒ ¹æ¹ýÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù. ÀÌ ¸ÊÇÎÀº IDocumentProvider¿¡¼ Á¤Àǵ˴ϴÙ. ÆíÁý±â ÀÔ·ÂÀÌ ÀÖ´Â °æ¿ì ¹®¼ Á¦°ø¾÷ü´Â ÀûÀýÇÑ IDocument¸¦ ¸®ÅÏÇÕ´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦´Â ÀûÀýÇÑ ¹®¼¸¦ ¸®ÅÏÇÏ´Â JavaDocumentProvider¸¦ Á¤ÀÇÇÕ´Ï´Ù. ÀûÀýÇÑ ¹®¼ Á¦°ø¾÷ü¿Í "*.jav" È®ÀåÀÚ °£ÀÇ °ü°è ¼³Á¤ ¹æ¹ýÀº ¹«¾ùÀԴϱî? org.eclipse.ui.documentProviders È®ÀåÀÚ¿¡¼ ±× °ü°è°¡ ¼³Á¤µË´Ï´Ù. ÀÌ È®ÀåÀº ¹®¼ Á¦°ø¾÷ü¿Í ÆÄÀÏ À¯Çü »çÀÌ¿¡ ¸ÊÇÎÀ» Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. 2 ¿¹Á¦´Â ¹®¼°¡ ´ÙÀ½°ú °°ÀÌ °ø±ÞµÊÀ» Á¤ÀÇÇÕ´Ï´Ù.
<extension point="org.eclipse.ui.documentProviders"> <provider extensions="jav" class="org.eclipse.ui.examples.javaeditor.JavaDocumentProvider" id="org.eclipse.ui.examples.javaeditor.JavaDocumentProvider"> </provider> </extension>
ÁöÁ¤µÈ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ¿¸é Workbench´Â ¹®¼ Á¦°ø¾÷ü ÀνºÅϽº ÀÛ¼ºÇÏ´Â ¼¼ºÎ»çÇ×À» °ü¸®ÇÕ´Ï´Ù. Workbench´Â ¹®¼ Á¦°ø¾÷ü ÀνºÅϽº¸¦ ÇÑ ¹ø¸¸ ÀÛ¼ºÇϰí ÀÌ ÀνºÅϽº¸¦ ´Ù¸¥ ÆíÁý±â °£¿¡ °øÀ¯ÇÕ´Ï´Ù.
Ç÷¯±×ÀÎÀÌ ¹®¼ Á¦°ø¾÷ü¸¦ µî·ÏÇϱâ À§ÇØ ÀÌ È®ÀåÁ¡À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¹®¼ Á¦°ø¾÷ü¸¦ ÆíÁý±â¿Í ¿¬°ü½ÃŰ´Â ´Ù¸¥ ¹æ¹ýÀº Ç÷¯±×ÀÎ ÀÚü°¡ ¹®¼ Á¦°ø¾÷ü¸¦ °ü¸®ÇÏ°Ô ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ÀÛ¾÷Àº ÀϹÝÀûÀ¸·Î Ç÷¯±×ÀΠŬ·¡½º¿¡¼ ¼öÇàµË´Ï´Ù. ÀÔ·Â ¿ä¼Ò°¡ ÆíÁý±â·Î ¼³Á¤µÇ¸é ÆíÁý±â´Â Ç÷¯±×ÀΠŬ·¡½º¿¡ ÀûÀýÇÑ ¹®¼ Á¦°ø¾÷ü¸¦ ¿äûÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀº ¹®¼ Á¦°ø¾÷ü¿¡ ´ëÇÑ ÂüÁ¶ ¹× ÀÛ¼ºÀ» °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ±â¹ýÀº ¹®¼ Á¦°ø¾÷ü¿Í ¿¬°üµÈ ´Ù¸¥ ó¸® ¶Ç´Â Ư¼ö ÃʱâȰ¡ ÀÖ´Â °æ¿ì ¹Ù¶÷Á÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î JDP µµ±¸¿¡¼ ClassFileEditor¸¦ ÂüÁ¶ÇϽʽÿÀ.
ÀûÀýÇÑ ¹®¼ Á¦°ø¾÷ü°¡ ÆíÁý±â¿Í ¿¬°üµÇ¸é, ±âº» Ÿ½ºÅ©´Â ÆíÁý±â ÀԷ¿¡¼ ¹®¼¸¦ ÀÛ¼ºÇÏ°í ¹®¼¸¦ ÆÄƼ¼ÇÀ¸·Î ºÐ¸®Çϱâ À§ÇØ ÀûÀýÇÑ ¿ÀºêÁ§Æ®¸¦ ±¸¼ºÇÏ´Â °ÍÀÔ´Ï´Ù.
JavaDocumentProvider¿¡¼ ¹®¼¿Í ÆÄƼ¼ÇÀ» »ìÆìº¸°Ú½À´Ï´Ù. ¹®¼°¡ ÀÛ¼ºµÇ¸é IDocumentPartitioner°¡ ÀÛ¼ºµÇ¾î ¹®¼·Î ¼³Á¤µË´Ï´Ù.
protected IDocument createDocument(Object element) throws CoreException { IDocument document= super.createDocument(element); if (document != null) { IDocumentPartitioner partitioner= createJavaPartitioner(); document.setDocumentPartitioner(partitioner); partitioner.connect(document); } return document; }
ÆÄƼ¼Å³Ê´Â ¹®¼¸¦ ÆÄƼ¼ÇÀ̶ó´Â °ãÄ¡Áö ¾Ê´Â ¿µ¿ªÀ¸·Î ºÐ¸®ÇØ¾ß ÇÕ´Ï´Ù. ÆÄƼ¼Ç(ITypedRegion¿¡ ³ªÅ¸³)Àº ±¸¹® °Á¶Ç¥½Ã ¶Ç´Â Çü½ÄÈó·³ ±â´É°ú °ü·ÃÇÏ¿© ¹®¼ÀÇ ´Ù¸¥ ¼½¼ÇÀ» ´Ù¸£°Ô ó¸®ÇÏ´Â µ¥ À¯¿ëÇÕ´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦ÀÇ °æ¿ì ¹®¼´Â javadoc ÁÖ¼®, º¹¼öÇà ÁÖ¼® µîÀ» ³ªÅ¸³»´Â ÆÄƼ¼ÇÀ¸·Î ºÐ¸®µË´Ï´Ù. °¢ ¿µ¿ªÀº ÄÁÅÙÃ÷ À¯Çü ¹× ¹®¼ÀÇ ÇØ´ç À§Ä¡¿¡ ÁöÁ¤µË´Ï´Ù. À§Ä¡´Â »ç¿ëÀÚ ÆíÁý ÅØ½ºÆ®·Î °»½ÅµË´Ï´Ù.
¹®¼ ÆÄƼ¼Å³à¿¡ ´ëÇÑ ÀûÀýÇÑ ±¸ÇöÀ» ÆÇº°ÇÏ´Â °ÍÀº °¢ ÆíÁý±â¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ±ÔÄ¢ ±â¹Ý ¹®¼ ½ºÄ³´×À» À§ÇÑ Áö¿øÀº org.eclipse.jface.text.rules¿¡ Á¦°øµË´Ï´Ù. ±ÔÄ¢ ±â¹Ý ±â¹Ý ½ºÄ³³Ê¸¦ »ç¿ëÇÏ¸é ÆíÁý±â´Â ÇÁ·¹ÀÓ¿öÅ©¿¡¼ Á¦°øµÈ DefaultPartitioner¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
private IDocumentPartitioner createJavaPartitioner() { return new DefaultPartitioner(getJavaPartitionScanner(), TYPES); }
RuleBasedPartitionScanner´Â ±ÔÄ¢ ±â¹Ý ½ºÄ³³ÊÀÇ ¼öÆÛŬ·¡½ºÀÔ´Ï´Ù. ¼ºêŬ·¡½º´Â ¹®¼¸¦ ½ºÄµÇÒ ¶§ Çà ºÐ¸®¹®ÀÚ, °ø¹é ¹× ÀÏ¹Ý ÆÐÅÏ µîÀÇ ÅäÅ«À» ±¸º°ÇÏ´Â µ¥ »ç¿ëÇØ¾ß ÇÒ ±ÔÄ¢À» ¿°ÅÇÏ°í ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ¿¹Á¦ÀÇ JavaPartitionScanner´Â ´ÜÀÏÇà ÁÖ¼®, ¹®ÀÚ »ó¼ö, javadoc. º¹¼öÇà ÁÖ¼® ¹× ´Ü¾î¸¦ ±¸º°ÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÔÄ¢À» Á¤ÀÇÇÕ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ½ºÄ³³ÊÀÇ »ý¼ºÀÚ¿¡¼ À̸¦ ¼öÇàÇÕ´Ï´Ù.
public JavaPartitionScanner() { super(); IToken javaDoc= new Token(JAVA_DOC); IToken comment= new Token(JAVA_MULTILINE_COMMENT); List rules= new ArrayList(); // Add rule for single line comments. rules.add(new EndOfLineRule("//", Token.UNDEFINED)); // Add rule for strings and character constants. rules.add(new SingleLineRule("\"", "\"", Token.UNDEFINED, '\\')); rules.add(new SingleLineRule("'", "'", Token.UNDEFINED, '\\')); // Add special case word rule. rules.add(new WordPredicateRule(comment)); // Add rules for multi-line comments and javadoc. rules.add(new MultiLineRule("/**", "*/", javaDoc, (char) 0, true)); rules.add(new MultiLineRule("/*", "*/", comment, (char) 0, true)); IPredicateRule[] result= new IPredicateRule[rules.size()]; rules.toArray(result); setPredicateRules(result); }
»ç¿ë °¡´ÉÇÑ ±ÔÄ¢ À¯Çü ¹× ±ÔÄ¢À» Á¤ÀÇÇÏ´Â µ¥ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº org.eclipse.jface.text.rulesÀÇ Å¬·¡½º¸¦ ÂüÁ¶ÇϽʽÿÀ. ±¸¹® »ö»óÀ» »ìÆì º¼ ¶§ ½ºÄ³³Ê¸¦ ´Ù½Ã »ìÆì º¾´Ï´Ù.
ÆíÁý±â ÀԷ¿¡ ´ëÇÑ ÀûÀýÇÑ ¹®¼¸¦ Á¦°øÇÏ´Â °Í ¿Ü¿¡µµ ¹®¼ Á¦°ø¾÷üÀÇ ¶Ç ´Ù¸¥ Áß¿äÇÑ Å¸½ºÅ©´Â ÆíÁý±â ÀԷ¿¡ »ç¿ëÇÒ ÀûÀýÇÑ IAnnotationModelÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸ðµ¨Àº ¹®¼¿¡ ÷ºÎµÈ ¾î³ëÅ×À̼ÇÀ» °ü¸®ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ¹®¼ Á¦°ø¾÷ü°¡ ¸ðµ¨À» Á¦°øÇÏ°Ô ÇÏ¸é ÆíÁý±â°¡ ÄÁÅÙÃ÷ÀÇ À¯Çü¿¡ ÀûÀýÇÑ ¸ðµ¨À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Àý¿¡¼ ¾î³ëÅ×ÀÌ¼Ç ¹× ¾î³ëÅ×À̼ÇÀ» º¸´Ù ÀÚ¼¼È÷ Á¦½ÃÇÏ´Â ¹æ¹ýÀ» »ìÆì º¾´Ï´Ù.