¼Ò½º Ç¥½Ã±â ¹× ¾î³ëÅ×À̼Ç

Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÆíÁý±â ¹®¼­ÀÇ Ç³ºÎÇÑ ÇÁ¸®Á¨Å×À̼ÇÀ» ±¸ÇöÇÏ´Â »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù.    

ÇÊ¿äÇÑ ÇïÆÛ Ŭ·¡½ºÀÇ ¹®¼­ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¹× ±¸¼ºÀÇ ±¸ÇöÀº ´ë°³ ÆíÁý±â ¹× ÇØ´ç ÅØ½ºÆ® Ç¥½Ã±â°¡ ¼öÇàÇÕ´Ï´Ù.  (Ç¥½Ã±â °³³ä¿¡ Àͼ÷ÇÏÁö ¾ÊÀ¸¸é Ç¥½Ã±â¸¦ ÂüÁ¶ÇϽʽÿÀ.)   

TextViewer´Â ¹®¼­ ¸ðµ¨ ¸ÊÇÎÀÇ ¸ðµç ÇÏÀ§ ·¹º§ ¼¼ºÎ»çÇ× ¹× ÇØ´ç ÆÄƼ¼ÇÀ» »ç¿ëÀÚ°¡ º¸´Â ä»öµÇ°í Çü½ÄÈ­µÈ ÅØ½ºÆ®·Î ó¸®ÇÕ´Ï´Ù.  ¼Ò½º ÄÚµå ½ºÅ¸ÀÏ ÆíÁý±âÀÇ °æ¿ì SourceViewer°¡ Á¦°øµË´Ï´Ù.  ¼Ò½º Ç¥½Ã±â¿¡¼­´Â ¼Ò½º ÄÚµå ¾î³ëÅ×À̼ÇÀÇ °³³äÀ» ¼Ò°³ÇÕ´Ï´Ù.  ÀÌ·¯ÇÑ ¾î³ëÅ×À̼ÇÀº ÅØ½ºÆ®ÀÇ ¿ÞÂÊ¿¡ ¼¼·Î ´«±ÝÀÚ, ÅØ½ºÆ®ÀÇ ¿À¸¥ÂÊ¿¡ °³¿ä ´«±ÝÀÚ¿¡ Ç¥½ÃµÇ°Å³ª  ¶Ç´Â ÅØ½ºÆ® ¹Ø¿¡ ä»öµÈ ºÒ±ÔÄ¢ÇÑ ¼±À¸·Î Ç¥½ÃµÉ ¼ö ÀÖ½À´Ï´Ù.

SourceViewer ¹× ÇØ´ç ÇïÆÛ Ŭ·¡½º´Â AbstractTextEditor °èÃþ ±¸Á¶¿¡¼­ »ç¿ëµË´Ï´Ù.  ÆÐŰÁö org.eclipse.jface.text.source´Â ÀÌ Ç¥½Ã±â ¹× ¾î³ëÅ×ÀÌ¼Ç ÇÁ¸®Á¨Å×À̼ÇÀ» Áö¿øÇÏ´Â ±âŸ Ŭ·¡½º¸¦ Á¤ÀÇÇÕ´Ï´Ù.

¾î³ëÅ×ÀÌ¼Ç ¹× ´«±ÝÀÚ

¹®¼­ Á¦°ø¾÷ü°¡ ¹®¼­ ÀÚü»Ó¸¸ ¾Æ´Ï¶ó ÇØ´ç ¹®¼­ÀÇ ¾î³ëÅ×À̼ǿ¡ ´ëÇÑ ¸ðµ¨ IAnnotationModelÀ» Á¦°øÇÑ´Ù´Â °ÍÀ» ¾Õ¼­ È®ÀÎÇß½À´Ï´Ù.  ÀÌ ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨Àº ¾î³ëÅ×À̼ÇÀ» º¸À¯ÇÏ°í ¿äû ½Ã À̸¦ ¿­°ÅÇϸç, ÅØ½ºÆ®¿¡ ¸ÂÃç ¾î³ëÅ×À̼ÇÀ» ÃֽŠ»óÅ·ΠÀ¯ÁöÇϵµ·Ï ÅØ½ºÆ® º¯°æ»çÇ×À» ûÃëÇÕ´Ï´Ù.   JavaDocumentProvider´Â FileDocumentProvider ¹× ÇØ´ç ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨¿¡ Á¤ÀÇµÈ ÀÛµ¿À» °è½ÂÇÕ´Ï´Ù.

protected IAnnotationModel createAnnotationModel(Object element) throws CoreException {
	if (element instanceof IFileEditorInput) {
		IFileEditorInput input= (IFileEditorInput) element;
		return new ResourceMarkerAnnotationModel(input.getFile());
	}
	return super.createAnnotationModel(element);
}

ResourceMarkerAnnotationModelÀº ÀÛ¾÷°ø°£ÀÇ ÀÚ¿ø¿¡ ¸¶Ä¿¸¦ ³ªÅ¸³»´Â ¾î³ëÅ×À̼ÇÀÇ ¸ðµ¨À» Á¤ÀÇÇÕ´Ï´Ù.  (¸¶Ä¿¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÚ¿ø ¸¶Ä¿¸¦ ÂüÁ¶ÇϽʽÿÀ.)  ÀÌ ¸ðµ¨Àº °¢ ¸¶Ä¿¿¡ À̹ÌÁö¿Í ¼³¸íÀ» ÁöÁ¤ÇÏ°í ¸¶Ä¿ÀÇ º¯°æ»çÇ×°ú °ü·ÃÇÑ ÀÚ¿øÀ» ¸ð´ÏÅÍÇÕ´Ï´Ù.

¹®¼­ ÆíÁý±â¿¡ ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨À» Ç¥½ÃÇÏ´Â ¹æ¹ýÀ» È®ÀÎÇϱâ À§ÇØ Ç÷§Æû ¹®¼­ ÆíÁý±â ¹× ÇØ´ç ´«±ÝÀÚ¿Í ¾î³ëÅ×À̼ÇÀÇ »ç¿ëÀ» °Ë»çÇÕ´Ï´Ù.  ¾î³ëÅ×À̼ÇÀÌ ´«±ÝÀÚ ¹× ÅØ½ºÆ®¿¡ Ç¥½ÃµÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº ¾î³ëÅ×ÀÌ¼Ç ÅÇ¿¡ ÀÖ´Â Workbench > ÆíÁý±â > ¹®¼­ ÆíÁý±â¿¡¼­ »ç¿ëÀÚ°¡ Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.

¼¼·Î ´«±ÝÀÚ

ÆíÁý ¿µ¿ª ¿ÞÂÊÀÇ ¼¼·Î ´«±ÝÀÚ´Â ÅØ½ºÆ® Çà°ú ÀÎÁ¢ÇÑ Çà ±â¹Ý ¾î³ëÅ×ÀÌ¼Ç ¹× ÅØ½ºÆ® ¹üÀ§¸¦ Ç¥½ÃÇÏ´Â °æ¿ì Ç÷§Æû ¹®¼­ ÆíÁý±â¿¡¼­ »ç¿ëµË´Ï´Ù.

ÀÌ·¯ÇÑ ¾î³ëÅ×À̼ÇÀº Á¦°øµÈ ResourceMarkerAnnotationModel¿¡¼­ ¼³¸íµË´Ï´Ù. ÀÌ ¸ðµ¨Àº ¼Ò½º Ç¥½Ã±â°¡ ÆíÁý±â¿¡ ÀÇÇØ ÃʱâÈ­µÉ ¶§ SourceViewer·Î ¼³Á¤µË´Ï´Ù.  AbstractTextEditor ·ÎºÎÅÍ ´ÙÀ½ ½º´ÏÆêÀº ¹®¼­¿Í ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨ÀÌ ¹®¼­¿Í ¿¬°üµÇ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

private void initializeSourceViewer(IEditorInput input) {
		
	IAnnotationModel model= getDocumentProvider().getAnnotationModel(input);
	IDocument document= getDocumentProvider().getDocument(input);
		
	if (document != null) {
		fSourceViewer.setDocument(document, model);
		...

¼Ò½º Ç¥½Ã±â°¡ ÀûÀýÇÑ ¹®¼­ ¹× ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨¿¡ ´ëÇØ ±¸¼ºµÇ¸é, ¼Ò½º Ç¥½Ã±â´Â ¹®¼­¸¦ Á¦ÃâÇÏ°í ¿Ã¹Ù¸¥ ¾î³ëÅ×À̼ÇÀÌ ¿ÞÂÊÀÇ ¼¼·Î ´«±ÝÀÚ¿¡ Ç¥½ÃµÇ±â¿¡ ÃæºÐÇÑ Á¤º¸¸¦ °®½À´Ï´Ù.  ¹®¼­°¡ ¼³Á¤µÉ ¶§ ¸ðµ¨ÀÌ ´«±ÝÀÚ¿Í ¿¬°üµË´Ï´Ù.  ´ÙÀ½ ½º´ÏÆê¿¡¼­´Â ¹®¼­°¡ ¼Ò½º Ç¥½Ã±â·Î ¼³Á¤µÉ ¶§ ÀϾ´Â »óȲÀ» º¸¿©ÁÝ´Ï´Ù.  À̰ÍÀº ¸í·áÇÏ°Ô SourceViewerÀÇ ½ÇÁ¦ ÄÚµå·ÎºÎÅÍ ´Ü¼øÈ­µÇ¾ú½À´Ï´Ù.

public void setDocument(IDocument document, IAnnotationModel annotationModel) {
	...
	// create visual annotation model from the supplied model and store 
	// in fVisualAnnotationModel
	...
	if (fVerticalRuler != null)
		fVerticalRuler.setModel(fVisualAnnotationModel);

ÀÌ·± ¹æ¹ýÀ¸·Î ´«±ÝÀÚ´Â ÀûÀýÇÑ ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨°ú ¿¬°üµË´Ï´Ù.   

´«±ÝÀÚ¸¦ »ìÆìº¾´Ï´Ù.  ¹®¼­ ÆíÁý±â¿¡¼­ ÀÛ¼ºµÇ¸ç ÆíÁý±â Ç¥½Ã±â¿Í ¿¬°áµË´Ï´Ù.  Java ÆíÁý±â ¿¹Á¦°¡ ´«±ÝÀÚÀÇ Æ¯¼ö ÀÛµ¿À» Á¤ÀÇÇÏÁö ¾ÊÀ¸¹Ç·Î, TextEditor¿¡ Á¤ÀÇµÈ ´ë·Î ´«±ÝÀÚ¸¦ °è½ÂÇÕ´Ï´Ù.

protected IVerticalRuler createVerticalRuler() {
	CompositeRuler ruler= new CompositeRuler();
	ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH));
	if (isLineNumberRulerVisible())
		ruler.addDecorator(1, createLineNumberRulerColumn());
	return ruler;
}

¹®¼­ ÆíÁý±â´Â CompositeRuler¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ´«±ÝÀÚ¿¡´Â ÀÚü ºñÁÖ¾ó ÇÁ¸®Á¨Å×À̼ÇÀÌ ¾ø½À´Ï´Ù.  ÇÁ¸®Á¨Å×À̼ÇÀº ´«±ÝÀÚÀÇ ¿­(IVerticalRulerColumn)À» Ç¥½ÃÇÏ´Â µ¥ÄÚ·¹ÀÌÅÍ ¸ñ·Ï¿¡ Á¦°øµË´Ï´Ù.  ÀÌ ¿¹Á¦¿¡¼­ ¾î³ëÅ×À̼Ç(AnnotationRulerColumn)À» Ç¥½ÃÇÏ´Â ´«±ÝÀÚ ¿­Àº Ç×»ó Ãß°¡µÇ¸ç Çà ¹øÈ£ ´«±ÝÀÚ ¿­Àº »ç¿ëÀÚ È¯°æ ¼³Á¤À» ±â¹ÝÀ¸·Î Ãß°¡µË´Ï´Ù. ¾î³ëÅ×ÀÌ¼Ç ´«±ÝÀÚ ¿­Àº ÀûÀýÇÑ À§Ä¡¿¡¼­ ¾î³ëÅ×ÀÌ¼Ç À̹ÌÁö¸¦ Ç¥½ÃÇϴ ƯÁ¤ Ç׸ñÀ» ó¸®ÇÕ´Ï´Ù.

¸ðµç Ŭ·¡½º°¡ ´«±ÝÀÚ¸¦ Ç¥½ÃÇÏ´Â µ¥ ¿¬°üµÇÁö¸¸ ´«±ÝÀÚ ÀÛµ¿À» °¡Á®¿À´Â °æ¿ì ¿¹Á¦ Ŭ·¡½º¿¡´Â ¼­ºêŬ·¡½º ÇÁ·¹ÀÓ¿öÅ© Ŭ·¡½º¸¸ ÇÊ¿äÇÕ´Ï´Ù.   JavaDocumentProvider´Â FileDocumentProvider·ÎºÎÅÍ ÀûÀýÇÑ ¸¶Ä¿ ¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨À» °è½ÂÇÕ´Ï´Ù.  JavaTextEditor´Â TextEditor·ÎºÎÅÍ ´«±ÝÀÚ ÇÁ¸®Á¨Å×À̼ÇÀ» °è½ÂÇÕ´Ï´Ù.

°³¿ä ´«±ÝÀÚ

ÆíÁý ¿µ¿ª ¿À¸¥ÂÊ¿¡ ÀÖ´Â °³¿ä ´«±ÝÀÚ´Â Àüü ¹®¼­¿¡ ´ëÇÑ ¾î³ëÅ×À̼ÇÀ» Ç¥½ÃÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.  ¹®¼­ À§Ä¡¿¡ »ó´ëÀûÀ¸·Î ÀÌ·¯ÇÑ ¾î³ëÅ×À̼ÇÀÌ Ç¥½ÃµÇ¸ç, »ç¿ëÀÚ°¡ ¹®¼­¸¦ È­¸éÀ̵¿ÇÒ ¶§ ¾î³ëÅ×À̼ÇÀº À̵¿ÇÏÁö ¾Ê½À´Ï´Ù.   ¹®¼­ÀÇ ÇØ´ç ºÎºÐÀÌ Ç¥½ÃµÇ¸é ¼¼·Î ´«±ÝÀÚ¿¡ ´ë°³ ÇØ´ç ¾î³ëÅ×À̼ÇÀÌ ÀÖ½À´Ï´Ù.   

¾Æ·¡ ¼¼·Î ´«±ÝÀÚ´Â ¹®¼­¿¡ µÎ °³ÀÇ Å¸½ºÅ©¿Í ÇϳªÀÇ Ã¥°¥Çǰ¡ ÀÖÀ½À» º¸¿©ÁÝ´Ï´Ù.  Ã¥°¥ÇÇ Ã³¸®µÈ ÅØ½ºÆ®°¡ Ç¥½ÃµÇ¹Ç·Î ÇØ´ç ¾î³ëÅ×ÀÌ¼Ç ¶ÇÇÑ ¿ÞÂÊ¿¡ Ç¥½ÃµË´Ï´Ù.

Java ÆíÁý±âÀÇ ¼¼·Î ´«±ÝÀÚ

»ç¿ëÀÚ´Â ¾î³ëÅ×ÀÌ¼Ç ÀÚü¸¦ ´­·¯ Äڵ忡 ¾î³ëÅ×ÀÌ¼Ç À§Ä¡·Î Ž»öÇÒ ¼ö ÀÖ½À´Ï´Ù.

°³¿ä ´«±ÝÀÚ¿¡ Ç¥½ÃµÈ ¾î³ëÅ×ÀÌ¼Ç À¯ÇüÀº ¾î³ëÅ×ÀÌ¼Ç À¯ÇüÀ» ´«±ÝÀÚ¿¡ Ãß°¡ÇÏ¿© ÆÇº°ÇÕ´Ï´Ù.  ´ÙÀ½ ½º´ÏÆê¿¡¼­ SourceViewerDecorationSupport·ÎºÎÅÍ ¾î³ëÅ×ÀÌ¼Ç À¯ÇüÀÌ µ¿ÀûÀ¸·Î ´«±ÝÀÚ¿¡ Ãß°¡µË´Ï´Ù. (SourceViewerDecorationSupport¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ´ÙÀ½ ÀýÀ» ÂüÁ¶ÇϽʽÿÀ.)

private void showAnnotationOverview(Object annotationType) {
if (fOverviewRuler != null) { Color c= getAnnotationTypeColor(annotationType);
fOverviewRuler.setAnnotationTypeColor(annotationType, c); int l= getAnnotationTypeLayer(annotationType);
fOverviewRuler.setAnnotationTypeLayer(annotationType, l);
fOverviewRuler.addAnnotationType(annotationType);
fOverviewRuler.update();
} }

¶ÇÇÑ °³¿ä ´«±ÝÀÚ´Â À¯Çü ¹× À¯ÇüÀÌ Ç¥½ÃµÇ´Â ¹æ¹ý µîÀÇ Æ¯Á¤ ¾î³ëÅ×À̼ǿ¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â µ¥ »ç¿ëµÇ´Â IAnnotationAccess¿Í ÇÔ²² Á¦°øµË´Ï´Ù.  TextEditor´Â ÇØ´ç ¸¶Ä¿ À¯Çü¿¡ µû¶ó ¾î³ëÅ×À̼ÇÀ» ÇØ¼®ÇÏ°í °³¿ä ´«±ÝÀÚ¿¡ Ç¥½ÃµÉ ¸¶Ä¿ À¯ÇüÀ» È®ÀÎÇÒ ¼ö ÀÖµµ·Ï »ç¿ëÀÚ È¯°æ ¼³Á¤À» Âü°íÇÏ´Â DefaultMarkerAnnotationAccess¸¦ »ç¿ëÇÕ´Ï´Ù.

protected IAnnotationAccess createAnnotationAccess() {
	return new DefaultMarkerAnnotationAccess(fAnnotationPreferences);
}

°³¿ä ´«±ÝÀÚ¿¡ ¸¶Ä¿¸¦ Ç¥½ÃÇÏ´Â µ¥ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº DefaultMarkerAnnotationAccess ¹× MarkerAnnotationÀÇ ±¸ÇöÀ» Âü°íÇϽʽÿÀ.

ÅØ½ºÆ® ¾î³ëÅ×À̼Ç

´«±ÝÀÚ¿¡ ¾î³ëÅ×À̼ÇÀ» Ç¥½ÃÇÏ´Â °Í À̿ܿ¡ ¼Ò½º Ç¥½Ã±â´Â ÅØ½ºÆ®¿¡ ä»öµÈ ºÒ±ÔÄ¢ÇÑ Ç¥½Ã·Î ¾î³ëÅ×À̼ÇÀ» Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.   

Java ÆíÁý±âÀÇ ¹°°á Ç¥½Ã

TextEditor¿¡¼­ ¼Ò½º Ç¥½Ã±âÀÇ ÀÛ¼ºÀ» ´Ù½Ã »ìÆìº¾´Ï´Ù.

protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
		
	... 
	ISourceViewer sourceViewer= new SourceViewer(parent, ruler, fOverviewRuler, isOverviewRulerVisible(), styles);
	fSourceViewerDecorationSupport= new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors);
	configureSourceViewerDecorationSupport();
		
	return sourceViewer;
}

Ŭ·¡½º SourceViewerDecorationSupport´Â ÅØ½ºÆ® ¾î³ëÅ×À̼Ç, ä»öµÈ ¿©¹é, ä»öµÈ Ä¿¼­ Çà µîÀ» Æ÷ÇÔÇÏ¿© ¼Ò½º Ç¥½Ã±â¿¡ Ç¥½ÃµÈ ´Ù¾çÇÑ µ¥ÄÚ·¹À̼ÇÀ» ó¸®ÇÕ´Ï´Ù.  ÀÌ Å¬·¡½º´Â »ç¿ëÀÚÀÇ È¯°æ ¼³Á¤ º¯°æ»çÇ×ÀÇ µ¿ÀûÀÎ °»½Å¿¡ ÀÀ´äÇÒ ¼ö ÀÖµµ·Ï »ç¿ëÀÚÀÇ È¯°æ ¼³Á¤°ú ÇÔ²² ±¸¼ºµË´Ï´Ù.  ´ëºÎºÐÀÇ ÆíÁý±â´Â ÀÌ·¯ÇÑ µ¥ÄÚ·¹À̼ÇÀÇ Ã¤»ö ¹æ½ÄÀ» ¼¼ºÎÀûÀ¸·Î »ó°üÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.  (ÇÊ¿äÇÑ °æ¿ì SourceViewerDecorationSupport ¹× AnnotationPainter¿Í °°Àº °ü·Ã Ŭ·¡½º¸¦ ÂüÁ¶ÇϽʽÿÀ! ) SourceViewer ¹× À̸¦ Áö¿øÇÏ´Â SourceViewerDecorationSupport°¡ ¿Ã¹Ù¸£°Ô ±¸¼ºµÇµµ·Ï »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÄÚ·¹À̼ÇÀÌ ¹«¾ùÀÎÁö ¾Ë¾Æ¾ß ÇÕ´Ï´Ù.

SourceViewerDecorationSupport ±¸¼º

µ¥ÄÚ·¹ÀÌ¼Ç Áö¿øÀ» À§ÇØ TextEditor¿¡¼­ »ç¿ëÇÏ´Â ±¸¼ºÀ» »ìÆìº¾´Ï´Ù.

protected void configureSourceViewerDecorationSupport() {

	Iterator e= fAnnotationPreferences.getAnnotationPreferences().iterator();
	while (e.hasNext())
		fSourceViewerDecorationSupport.setAnnotationPreference((AnnotationPreference) e.next());
	fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(DefaultMarkerAnnotationAccess.UNKNOWN, UNKNOWN_INDICATION_COLOR, UNKNOWN_INDICATION, UNKNOWN_INDICATION_IN_OVERVIEW_RULER, 0);
		
	fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE, CURRENT_LINE_COLOR);
	fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN, PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN);
	fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey());
}

¾î³ëÅ×ÀÌ¼Ç È¯°æ ¼³Á¤Àº »ç¿ëÀÚ È¯°æ ¼³Á¤¿¡ Ç¥½ÃµÈ ¸ðµç ¾î³ëÅ×À̼ǿ¡ ´ëÇÑ ¾î³ëÅ×ÀÌ¼Ç À¯ÇüÀ» Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.  ¿©±â¿¡´Â Ç÷¯±×Àο¡¼­ Á¦°øÇÏ´Â ¾î³ëÅ×À̼ÇÀÌ Æ÷ÇԵǸç Workbench Á¦°ø ¾î³ëÅ×À̼ÇÀ¸·Î Á¦ÇѵÇÁö ¾Ê½À´Ï´Ù.  ÆíÁý±â¿¡ »ç¿ë °¡´ÉÇÑ ¾î³ëÅ×À̼ÇÀ» ÀϺθ¸ Ç¥½ÃÇÏ·Á¸é ÀÌ ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© Ç¥½ÃÇÏ·Á´Â À¯Çü¸¸ »ç¿ëÇÏ¿© SourceViewerDecorationSupport¸¦ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù.

Copyright IBM Corporation and others 2000, 2003.