dz¼± µµ¿ò¸» Áö¿øÀº Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©¿¡ Á¦°øµÇ¸ç, ÆíÁý±â¿¡ Ç¥½ÃµÈ ´«±ÝÀÚ ¹× ÅØ½ºÆ®¿¡ Á¤º¸ À§¿¡ Á¤º¸¸¦ Áִ dz¼± µµ¿ò¸»(¶Ç´Â Á¤º¸ ÆË¾÷)¸¦ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
dz¼± µµ¿ò¸» Áö¿øÀº ¼±ÅÃÀûÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î SourceViewerConfigurationÀº ÀÏ¹Ý Á¤º¸¸¦ Ç¥½ÃÇÏ´Â µ¥ À¯¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î dz¼± µµ¿ò¸» ÀÛµ¿À» ¼³Ä¡ÇÏÁö ¾Ê½À´Ï´Ù. ÅØ½ºÆ® ¶Ç´Â ´«±ÝÀÚ Ç³¼± µµ¿ò¸»À» Á¦°øÇÏ·Á¸é, Ç÷¯±× °¡´É dz¼± µµ¿ò¸» ¿ÀºêÁ§Æ®¸¦ Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï ÆíÁý±âÀÇ ¼Ò½º Ç¥½Ã±â ±¸¼ºÀ» ±¸¼ºÇØ¾ß ÇÕ´Ï´Ù.
´ÙÀ½°ú °°ÀÌ Ç³¼± µµ¿ò¸» ÀÛµ¿À» Á¤ÀÇÇÏ´Â ¸Þ¼Òµå¸¦ È®ÀÎÇÒ ¼ö ÀÖµµ·Ï JavaSourceViewerConfigurationÀ» ´Ù½Ã »ìÆì º¾´Ï´Ù.
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new JavaTextHover(); } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new JavaAnnotationHover(); }
¶ÇÇÑ Ç³¼± µµ¿ò¸» ÇïÆÛ Ŭ·¡½º´Â SourceViewer ÇÁ·ÎÅäÄÝ(setTextHover ¹× setAnnotationHover)À» »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î ¼³Ä¡µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ¼öÇàÇÏ´Â °æ¿ì Ưº°ÇÑ ·±Å¸ÀÓ ÀÌÁ¡Àº ¾øÀ¸³ª SourceViewerConfigurationÀÇ ¼ºêŬ·¡½º¿¡ Ç÷¯±× °¡´ÉÇÑ ÀÛµ¿ ´ëü»çÇ×À» ¸ðµÎ ³õÀ¸¸é ÇÑ À§Ä¡¿¡¼ ¸ðµç ÀÛµ¿ ´ëü»çÇ×À» ÅëÇÕÇÒ ¼ö ÀÖ´Â ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù.
µÎ °¡Áö Á¾·ùÀÇ Ç³¼± µµ¿ò¸»À» Á¦°øÇÏ´Â µ¥ ´ëÇÑ ¼¼ºÎ»çÇ×À» »ìÆì º¾´Ï´Ù.
dz¼± µµ¿ò¸»À» »ç¿ëÇÏ¿© ÆíÁý±â¿¡ Ç¥½ÃµÈ ÅØ½ºÆ®¿¡ ´ëÇÑ Á¤º¸ ÅØ½ºÆ®¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ITextHover ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¼öÇàµË´Ï´Ù. dz¼± µµ¿ò¸»Àº ¹®¼¿¡ ¿ÀÇÁ¼ÂÀÌ ÀÖ´Â °æ¿ì dz¼± µµ¿ò¸» Á¤º¸ÀÇ ¼Ò½º·Î »ç¿ëµÇ¾î¾ß ÇÒ ¿µ¿ªÀ» °è»êÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ Æ¯Á¤ ¿µ¿ª¿¡ ´ëÇÑ Á¤º¸ ÅØ½ºÆ®µµ Á¦°øÇØ¾ß ÇÕ´Ï´Ù. JavaTextHover´Â ¸Å¿ì ´Ü¼øÇÕ´Ï´Ù. dz¼± µµ¿ò¸»¿¡ Á¦°øµÈ ¿ÀÇÁ¼ÂÀÌ ÅØ½ºÆ® ¼±ÅûçÇ× ³»ºÎ¿¡ Æ÷ÇԵǴÂÁö È®ÀÎÇÕ´Ï´Ù. ¿ÀÇÁ¼ÂÀÌ ÅØ½ºÆ® ¼±ÅûçÇ× ³»ºÎ¿¡ Æ÷ÇԵǴ °æ¿ì, dz¼± µµ¿ò¸» ¿µ¿ªÀ¸·Î ¼±Åà ¹üÀ§¸¦ Á¦°øÇÕ´Ï´Ù.
public class JavaTextHover implements ITextHover { ... public IRegion getHoverRegion(ITextViewer textViewer, int offset) { Point selection= textViewer.getSelectedRange(); if (selection.x <= offset && offset < selection.x + selection.y) return new Region(selection.x, selection.y); return new Region(offset, 0); } }
ÀÚü °è»êµÈ dz¼± µµ¿ò¸» ¿µ¿ªÀÌ ÀÖ´Â °æ¿ì ¹®¼¿¡¼ ¼±ÅÃÇÑ ÅØ½ºÆ®¸¦ È®º¸ÇÏ¿© dz¼± µµ¿ò¸» Á¤º¸·Î¼ ÅØ½ºÆ®¸¦ ¸®ÅÏÇÕ´Ï´Ù.
public class JavaTextHover implements ITextHover { public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { if (hoverRegion != null) { try { if (hoverRegion.getLength() > -1) return textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength()); } catch (BadLocationException x) { } } return JavaEditorMessages.getString("JavaTextHover.emptySelection"); } ... }
ÆíÁý±âÀÇ ¼±ÅûçÇ× À§¿¡ ¸¶¿ì½º¸¦ ³õÀ¸¸é dz¼± µµ¿ò¸»¿¡ ¼±ÅûçÇ×ÀÌ Ç¥½ÃµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
º¸´Ù º¹ÀâÇÑ ÄÁÅØ½ºÆ® Á¤º¸¸¦ »ç¿ëÇÏ¿© À¯¿ëÇÑ Ç³¼± µµ¿ò¸» Á¤º¸¸¦ °è»êÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦´Â JDT ÆíÁý±â¿¡ ´ëÇØ ±¸ÇöµÈ JavaTextHover¿¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù.
¼¼·Î ´«±ÝÀÚÀÇ Ç³¼± µµ¿ò¸»Àº Ç¥½Ã Çà ÁöÇâ Á¤º¸¸¦ Ç¥½ÃÇÏ´Â µ¥ À¯¿ëÇÕ´Ï´Ù. dz¼± µµ¿ò¸» Ŭ·¡½º´Â À§ÀÇ ¼³¸íµÈ ´ë·Î ±¸¼ºµË´Ï´Ù. IAnnotationHover´Â ´«±ÝÀÚ Ç³¼± µµ¿ò¸» ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. dz¼± µµ¿ò¸»ÀÌ ´«±ÝÀÚÀÇ ¾î³ëÅ×À̼ǿëÀ¸·Î µðÀÚÀεǾúÀ½À» À̸§ÀÌ ÀǹÌÇÑ´Ù°í ÇØµµ ÀûÀýÇÑ ³»¿ëÀ» ÆÇº°ÇÏ´Â °ÍÀº ÀüÀûÀ¸·Î °³º° ÆíÁý±â¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ´«±ÝÀÚ Ç³¼± µµ¿ò¸»Àº ÇØ´ç Çà ¸¶Ä¿ÀÇ Á¸Àç¿¡ °ü°è¾øÀÌ Æ¯Á¤ Çà ¹øÈ£¿Í ¿¬°üµÈ Á¤º¸ ¹®ÀÚ¿À» ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù.
Java ¿¹Á¦ ÆíÁý±âÀÇ JavaAnnotationHover´Â ¸ðµç Çà¿¡ ´ëÇÑ Ç³¼± µµ¿ò¸»À» ±¸ÇöÇÕ´Ï´Ù. JavaAnnotationHover´Â dz¼± µµ¿ò¸» ÇàÀÇ ¸ðµç ÅØ½ºÆ®¸¦ ¾ò°í Á¤º¸ ¹®ÀÚ¿·Î ÀÌ ÅØ½ºÆ®¸¦ ¸®ÅÏÇÏ´Â µ¥ Çà ¹øÈ£¸¦ »ç¿ëÇÕ´Ï´Ù.
public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { IDocument document= sourceViewer.getDocument(); try { IRegion info= document.getLineInformation(lineNumber); return document.get(info.getOffset(), info.getLength()); } catch (BadLocationException x) { } return null; }
dz¼± µµ¿ò¸»¿¡´Â ¹®¼ ¹× ¼Ò½º Ç¥½Ã±â¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖÀ¸¹Ç·Î Ç¥½ÃµÉ Á¤º¸¿¡ ´ëÇÑ º¸´Ù º¹ÀâÇÑ ÄÁÅØ½ºÆ®¸¦ °áÁ¤ÇÏ´Â µ¥ ÇÊ¿äÇÑ ¸ðµç ÄÁÅØ½ºÆ®°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨Àº ¼¼·Î ´«±ÝÀÚ¿¡ Ç¥½ÃµÈ ¾î³ëÅ×À̼ǿ¡ ´ëÇØ dz¼± µµ¿ò¸» Á¤º¸¸¦ Á¦°øÇϱâ À§ÇØ ¼Ò½º Ç¥½Ã±â¿¡¼ °Ë»öµÉ ¼ö ÀÖ½À´Ï´Ù. JDT ÆíÁý±â¸¦ ÅëÇØ Á¦°øµÈ JavaAnnotationHover´Â ÀÌ ¼º´ÉÀ» Á¦°øÇÕ´Ï´Ù.