Ç÷¯±×ÀÎÀº JDT API¸¦ »ç¿ëÇÏ¿© Ŭ·¡½º³ª ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇÏ°í ±âÁ¸ À¯Çü¿¡ ¸Þ¼Òµå¸¦ Ãß°¡Çϰųª À¯Çü¿¡ ´ëÇÑ ¸Þ¼Òµå¸¦ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
Java ¿ÀºêÁ§Æ®¸¦ º¯°æÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº Java ¿ä¼Ò API¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. º¸´Ù ÀϹÝÀûÀÎ ±â¼úÀÌ Java ¿ä¼ÒÀÇ ¿ø½Ã ¼Ò½º Äڵ忡 ´ëÇÑ ÀÛ¾÷À» À§ÇØ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
ÄÄÆÄÀÏ ´ÜÀ§¸¦ ÇÁ·Î±×·¥¿¡ µû¶ó »ý¼ºÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº IPackageFragment.createCompilationUnitÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ÄÄÆÄÀÏ ´ÜÀ§ÀÇ À̸§°ú ÄÁÅÙÃ÷¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÄÄÆÄÀÏ ´ÜÀ§°¡ ÆÐŰÁö ³»¿¡ ÀÛ¼ºµÇ°í »õ ICompilationUnitÀÌ ¸®Åϵ˴ϴÙ.
º¸Åë ÄÄÆÄÀÏ ´ÜÀ§´Â ÆÐŰÁö µð·ºÅ丮¿¡ ÇØ´çÇÏ´Â ÀûÀýÇÑ Æú´õ¿¡ È®ÀåÀÚ°¡ ".java"ÀÎ ÆÄÀÏ ÀÚ¿øÀ» ¸¸µé¾î¼ ÀÛ¼ºµË´Ï´Ù. ÀÏ¹Ý ÀÚ¿ø API¸¦ »ç¿ëÇϸé Java µµ±¸ÀÇ µÚ·Î À̵¿ÇϹǷΠÀÏ¹Ý ÀÚ¿ø º¯°æ ¸®½º³Ê°¡ ¾Ë·ÁÁö°í JDT ¸®½º³Ê°¡ Java ¸ðµ¨À» »õ ÄÄÆÄÀÏ ´ÜÀ§·Î °»½ÅÇØ¾ß Java ¸ðµ¨ÀÌ °»½ÅµË´Ï´Ù.
Java ¼Ò½º¸¦ ¼öÁ¤ÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº Java ¿ä¼Ò API¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
¿¹¸¦ µé¾î, ÄÄÆÄÀÏ ´ÜÀ§¿¡¼ À¯ÇüÀ» Á¶È¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÏ´Ü ITypeÀ» °¡Áö¸é, À¯ÇüÀ¸·Î ¼Ò½º ÄÚµå ±¸¼º¿øÀ» Ãß°¡Çϱâ À§ÇØ createField, createInitializer, createMethod, ¶Ç´Â createType¿Í °°Àº ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸¼º¿øÀÇ À§Ä¡¿¡ °üÇÑ Á¤º¸¿Í ¼Ò½º Äڵ尡 ÀÌ·¯ÇÑ ¸Þ¼Òµå¿¡ Á¦°øµË´Ï´Ù.
ISourceManipulation ÀÎÅÍÆäÀ̽º´Â Java ¿ä¼ÒÀÇ °øÅë ¼Ò½º Á¶ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. ¿©±â¿¡´Â À¯Çü ±¸¼º¿øÀÇ À̸§ ¹Ù²Ù±â, À̵¿, º¹»ç ¶Ç´Â »èÁ¦ ¸Þ¼Òµå°¡ Æ÷ÇԵ˴ϴÙ.
ÄÚµå´Â ÄÄÆÄÀÏ ´ÜÀ§¸¦ Á¶ÀÛÇÏ¿© ¼öÁ¤µÇ°Å³ª(¼û°ÜÁø IFileÀÌ ¼öÁ¤µÊ), ÀÛ¾÷ »çº»À¸·Î ºÒ¸®¿ì´Â ÄÄÆÄÀÏ ´ÜÀ§ÀÇ ¸Þ¸ð¸®³» »çº»À» ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÛ¾÷ »çº»Àº getWorkingCopy ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÄÄÆÄÀÏ ´ÜÀ§¿¡¼ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. (ÀÛ¾÷ »çº»À» ÀÛ¼ºÇϱâ À§ÇØ ÄÄÆÄÀÏ ´ÜÀ§°¡ Java ¸ðµ¨¿¡ Á¸ÀçÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.) ÀÌ·¯ÇÑ ÀÛ¾÷ »çº»À» ÀÛ¼ºÇÑ ¸ðµç »ç¶÷Àº destroy ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ´õÀÌ»ó »ç¿ëÇÏÁö ¾ÊÀ» ¶§¿¡´Â À̸¦ Á¦°ÅÇØ¾ßÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù.
ÀÛ¾÷ »çº»Àº ¸Þ¸ð¸® ³» ¹öÆÛ¸¦ ¼öÁ¤ÇÕ´Ï´Ù. getWorkingCopy() ¸Þ¼Òµå´Â ±âº» ¹öÆÛ¸¦ ÀÛ¼ºÇϳª Ŭ¶óÀÌ¾ðÆ®´Â getWorkingCopy(IProgressMonitor, IBufferFactory, IProblemRequestor) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÀÚ½ÅÀÇ ¹öÆÛ ±¸ÇöÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ¹öÆÛÀÇ ÅØ½ºÆ®¸¦ Á÷Á¢ Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, Ŭ¶óÀÌ¾ðÆ®´Â reconcile() ¸Þ¼Òµå ¶Ç´Â reconcile(boolean,IProgressMonitor) ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¶§¶§·Î ¹öÆÛ¿Í ÀÛ¾÷ »çº»À» µ¿±âÈÇØ¾ß ÇÕ´Ï´Ù.
¸¶Áö¸·À¸·Î, ÀÛ¾÷ »çº»Àº commit ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© µð½ºÅ©¿¡ ÀúÀåµÉ ¼ö ÀÖ½À´Ï´Ù(¿ø·¡ ÄÄÆÄÀÏ ´ÜÀ§¸¦ ´ëü).
¿¹¸¦ µé¾î, ´ÙÀ½ ÄÚµå ½º´ÏÆêÀº »ç¿ëÀÚ Á¤ÀÇ ¹öÆÛ ÆÑÅ丮¸¦ »ç¿ëÇÏ¿© ÄÄÆÄÀÏ ´ÜÀ§¿¡¼ ÀÛ¾÷ »çº»À» ÀÛ¼ºÇÕ´Ï´Ù. ½º´ÏÆêÀº ¹öÆÛ¸¦ ¼öÁ¤Çϰí, º¯°æ»çÇ×À» Á¶Á¤Çϰí, µð½ºÅ©¿¡ º¯°æ»çÇ×À» È®¾àÇÑ ÈÄ ¸¶Áö¸·¿¡´Â ÀÛ¾÷ »çº»À» Á¦°ÅÇÕ´Ï´Ù.
// Get original compilation unit ICompilationUnit originalUnit = ...; // Get buffer factory IBufferFactory factory = ...; // Create working copy IWorkingCopy workingCopy = (IWorkingCopy)originalUnit.getWorkingCopy(null, factory, null); // Modify buffer and reconcile IBuffer buffer = ((IOpenable)workingCopy).getBuffer(); buffer.append("class X {}"); workingCopy.reconcile(); // Commit changes workingCopy.commit(false, null); // Destroy working copy workingCopy.destroy();
ÀÛ¾÷ »çº»Àº ÀϺΠŬ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ °øÀ¯µÉ ¼ö ÀÖ½À´Ï´Ù. °øÀ¯ ÀÛ¾÷ »çº»Àº getSharedWorkingCopy ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÀÛ¼ºµÇ¸ç À̰ÍÀº ³ªÁß¿¡ findSharedWorkingCopy ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© °Ë»öµÉ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î °øÀ¯ ÀÛ¾÷ »çº»Àº ¿ø·¡ ÄÄÆÄÀÏ ´ÜÀ§¿Í ¹öÆÛ ÆÑÅ丮¿¡¼ Á¶Á¤µË´Ï´Ù.
´ÙÀ½Àº Ŭ¶óÀÌ¾ðÆ® 1ÀÌ °øÀ¯ ÀÛ¾÷ »çº»À» ÀÛ¼ºÇϰí, Ŭ¶óÀÌ¾ðÆ® 2°¡ ÀÌ ÀÛ¾÷ »çº»À» °Ë»öÇϰí, Ŭ¶óÀÌ¾ðÆ® 1ÀÌ ÀÛ¾÷ »çº»À» Á¦°ÅÇÑ ÈÄ °øÀ¯ ÀÛ¾÷ »çº» °Ë»öÀ» ½ÃµµÇϴ Ŭ¶óÀÌ¾ðÆ® 2°¡ ´õÀÌ»ó À̰ÍÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í ¾Ë·ÁÁÖ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
// Client 1 & 2: Get original compilation unit ICompilationUnit originalUnit = ...; // Client 1 & 2: Get buffer factory IBufferFactory factory = ...; // Client 1: Create shared working copy IWorkingCopy workingCopyForClient1 = (IWorkingCopy)originalUnit.getSharedWorkingCopy(null, factory, null); // Client 2: Retrieve shared working copy IWorkingCopy workingCopyForClient2 = (IWorkingCopy)originalUnit.findSharedWorkingCopy(factory); // This is the same working copy assert workingCopyForClient1 == workingCopyForClient2; // Client 1: Destroy shared working copy workingCopyForClient1.destroy(); // Client 2: Attempt to retrieve shared working copy and find out it's null workingCopyForClient2 = (IWorkingCopy)originalUnit.findSharedWorkingCopy(factory); assert workingCopyForClient2 == null;
AST ÆÑÅ丮 ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ½ºÅ©·¡Ä¡¿¡¼ CompilationUnit¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå À̸§Àº new...·Î ½ÃÀ۵˴ϴÙ. ´ÙÀ½Àº HelloWorld Ŭ·¡½º ÀÛ¼ºÀÇ ¿¹ÀÔ´Ï´Ù.
ù ¹øÂ° ½º´ÏÆêÀº »ý¼ºµÈ Ãâ·ÂÀÔ´Ï´Ù.
package example;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello" + " world");
}
}
´ÙÀ½ ½º´ÏÆêÀº Ãâ·ÂÀ» »ý¼ºÇÑ ÇØ´ç ÄÚµåÀÔ´Ï´Ù.
AST ast = new AST();
CompilationUnit unit = ast.newCompilationUnit();
PackageDeclaration packageDeclaration = ast.newPackageDeclaration();
packageDeclaration.setName(ast.newSimpleName("example"));
unit.setPackage(packageDeclaration);
ImportDeclaration importDeclaration = ast.newImportDeclaration();
QualifiedName name =
ast.newQualifiedName(
ast.newSimpleName("java"),
ast.newSimpleName("util"));
importDeclaration.setName(name);
importDeclaration.setOnDemand(true);
unit.imports().add(importDeclaration);
TypeDeclaration type = ast.newTypeDeclaration();
type.setInterface(false);
type.setModifiers(Modifier.PUBLIC);
type.setName(ast.newSimpleName("HelloWorld"));
MethodDeclaration methodDeclaration = ast.newMethodDeclaration();
methodDeclaration.setConstructor(false);
methodDeclaration.setModifiers(Modifier.PUBLIC | Modifier.STATIC);
methodDeclaration.setName(ast.newSimpleName("main"));
methodDeclaration.setReturnType(ast.newPrimitiveType(PrimitiveType.VOID));
SingleVariableDeclaration variableDeclaration = ast.newSingleVariableDeclaration();
variableDeclaration.setModifiers(Modifier.NONE);
variableDeclaration.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("String"))));
variableDeclaration.setName(ast.newSimpleName("args"));
methodDeclaration.parameters().add(variableDeclaration);
org.eclipse.jdt.core.dom.Block block = ast.newBlock();
MethodInvocation methodInvocation = ast.newMethodInvocation();
name =
ast.newQualifiedName(
ast.newSimpleName("System"),
ast.newSimpleName("out"));
methodInvocation.setExpression(name);
methodInvocation.setName(ast.newSimpleName("println"));
InfixExpression infixExpression = ast.newInfixExpression();
infixExpression.setOperator(InfixExpression.Operator.PLUS);
StringLiteral literal = ast.newStringLiteral();
literal.setLiteralValue("Hello");
infixExpression.setLeftOperand(literal);
literal = ast.newStringLiteral();
literal.setLiteralValue(" world");
infixExpression.setRightOperand(literal);
methodInvocation.arguments().add(infixExpression);
ExpressionStatement expressionStatement = ast.newExpressionStatement(methodInvocation);
block.statements().add(expressionStatement);
methodDeclaration.setBody(block);
type.bodyDeclarations().add(methodDeclaration);
unit.types().add(type);
private int[] getOperatorPosition(Expression expression, char[] source) { if (expression instanceof InstanceofExpression) { IScanner scanner = ToolFactory.createScanner(false, false, false, false); scanner.setSource(source); int start = expression.getStartPosition(); int end = start + expression.getLength(); scanner.resetTo(start, end); int token; try { while ((token = scanner.getNextToken()) != ITerminalSymbols.TokenNameEOF) { switch(token) { case ITerminalSymbols.TokenNameinstanceof: return new int[] {scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition()}; } } } catch (InvalidInputException e) { } } return null; }IScanner´Â ÅäÅ«À¸·Î ÀÔ·Â ¼Ò½º¸¦ ³ª´©´Â µ¥ »ç¿ëµË´Ï´Ù. °¢ ÅäÅ«Àº ITerminalSymbols ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ Æ¯Á¤ °ªÀ» °®½À´Ï´Ù. À̰ÍÀº ¿Ã¹Ù¸¥ ÅäÅ«ÀÇ ¹Ýº¹ ¹× °Ë»öÀ» À§ÇØ ¸Å¿ì °£´ÜÇÕ´Ï´Ù. SuperMethodInvocation¿¡¼ super Ű¿öµåÀÇ À§Ä¡¸¦ ãÀ¸·Á¸é ½ºÄ³³Ê¸¦ »ç¿ëÇϽʽÿÀ.
ÀϺΠ¼Ò½º ÄÚµå ¼öÁ¤Àº Java ¿ä¼Ò API¸¦ ÅëÇØ Á¦°øµÇÁö ¾Ê½À´Ï´Ù. ¼Ò½º Äڵ带 ÆíÁý(¿¹: ±âÁ¸ ¿ä¼ÒÀÇ ¼Ò½º ÄÚµå º¯°æ)ÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀº ÄÄÆÄÀÏ ´ÜÀ§ÀÇ ¿ø½Ã ¼Ò½º ÄÚµå¿Í Java DOMÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
ÀÌ·¯ÇÑ ±â¼úÀº ´ÙÀ½°ú °°½À´Ï´Ù.
// get the source for a compilation unit String contents = myCompilationUnit.getBuffer().getContents(); // Create an editable JDOM myJDOM = new DOMFactory(); myDOMCompilationUnit = myJDOM.createCompilationUnit(contents, "MyClass"); // Navigate and edit the compilation unit structure using // JDOM node protocol. ... // Once modififications have been made to all of the nodes // get the source back from the compilation unit DOM node. String newContents = myDOMCompilationUnit.getContents(); // Set this code back into the compilation unit element myCompilationUnit.getBuffer().setContents(newContents); // Save the buffer to the file. myCompilationUnit.save(null, false);
ÀÌ ±â¼úÀº Java ¿ä¼Ò°¡ °ð¹Ù·Î °»½ÅµÇÁö ¾Ê±â ¶§¹®¿¡ ¿Ã¹Ù¸£Áö ¾ÊÀº Çà ¹øÈ£¿Í ¿¬°üµÈ ¹®Á¦Á¡ ¸¶Ä¿°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
Java ¿ä¼Ò ¸ðµ¨Àº ¸Þ¼Òµå¿Í Çʵ庸´Ù Á¤±³ÇÏÁö ¾Ê½À´Ï´Ù. ÄÄÆÄÀÏ·¯¿¡ »ç¿ëµÇ´Â ¿ä¾à ±¸¹® Æ®¸®¸¦ API·Î »ç¿ëÇÒ ¼ö ¾øÀ¸¹Ç·Î JDT¿¡¼ ¼Ò½º¸¦ ÇÁ·Î±×·¥ ±¸Á¶·Î ºÐ¼®ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ±â¼úÀ» ÇöÀç API·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
Ç÷¯±×ÀÎÀÌ »çÈÄ¿¡ Java ¿ä¼Ò¿¡ ´ëÇÑ º¯°æ»çÇ×À» ¾Ë¾Æ¾ß ÇÒ °æ¿ì Java IElementChangedListener¸¦ JavaCore¿¡ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù.
JavaCore.addElementChangedListener(new MyJavaElementChangeReporter());
addElementChangedListener(IElementChangedListener, int)¸¦ »ç¿ë Áß¿¡ °ü½ÉÀÖ´Â À̺¥Æ®ÀÇ À¯ÇüÀ» ÁöÁ¤ÇÏ¿© Á» ´õ ±¸Ã¼ÀûÀÏ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î, ºô´õ°¡ ½ÇÇàÇϱâ Àü À̺¥Æ® ûÃë¿¡¸¸ °ü½ÉÀÌ ÀÖ´Â °æ¿ì:
JavaCore.addElementChangedListener(new MyJavaElementChangeReporter(), ElementChangedEvent.PRE_AUTO_BUILD);
JavaCore°¡ Áö¿øÇÏ´Â À̺¥Æ® Á¾·ù¿¡´Â ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù.
Java ¿ä¼Ò º¯°æ ¸®½º³Ê´Â ÀÚ¿ø º¯°æ ¸®½º³Ê(ÀÚ¿ø º¯°æ ÃßÀû¿¡ ¼³¸í)¿Í °³³äÀûÀ¸·Î À¯»çÇÕ´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº ½Ã½ºÅÛ ÄܼÖÀÇ ¿ä¼Ò µ¨Å¸¸¦ ÀμâÇÏ´Â Java ¿ä¼Ò º¯°æ º¸°í¼¸¦ ±¸ÇöÇÕ´Ï´Ù.
public class MyJavaElementChangeReporter implements IElementChangedListener { public void elementChanged(ElementChangedEvent event) { IJavaElementDelta delta= event.getDelta(); if (delta != null) { System.out.println("delta received: "); System.out.print(delta); } } }
IJavaElementDelta¿¡´Â º¯°æµÈ ¿ä¼Ò¿Í º¯°æ À¯ÇüÀ» ¼³¸íÇÏ´Â Ç÷¡±×°¡ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ µ¨Å¸ Æ®¸®´Â Java ¸ðµ¨ ·¹º§À» ±Ù°Å·Î ÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ¾î¶² ÇÁ·ÎÁ§Æ®°¡ º¯°æµÇ¾ú´ÂÁö ¾Ë¾Æº¸±â À§ÇØ getAffectedChildrenÀ» »ç¿ëÇÏ¿© ÀÌ µ¨Å¸¸¦ Ž»öÇØ¾ß ÇÕ´Ï´Ù.
´ÙÀ½ ¿¹Á¦ ¸Þ¼Òµå´Â µ¨Å¸¸¦ Åë°úÇϰí Ãß°¡, Á¦°Å ¹× ¼öÁ¤µÈ ¿ä¼Ò¸¦ ÀμâÇÕ´Ï´Ù.
void traverseAndPrint(IJavaElementDelta delta) { switch (delta.getKind()) { case IJavaElementDelta.ADDED: System.out.println(delta.getElement() + " was added"); break; case IJavaElementDelta.REMOVED: System.out.println(delta.getElement() + " was removed"); break; case IJavaElementDelta.CHANGED: System.out.println(delta.getElement() + " was changed"); if ((delta.getFlags() & IJavaElementDelta.F_CHILDREN) != 0) { System.out.println("The change was in its children"); } if ((delta.getFlags() & IJavaElementDelta.F_CONTENT) != 0) { System.out.println("The change was in its content"); } /* Others flags can also be checked */ break; } IJavaElementDelta[] children = delta.getAffectedChildren(); for (int i = 0; i < children.length; i++) { traverseAndPrint(children[i]); } }
Á¶ÀÛÀÇ ¸î¸î Á¾·ù´Â Java ¿ä¼Ò º¯°æ °ø°í¸¦ Æ®¸®°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ÀϺΠ¿¹ÀÔ´Ï´Ù.
IResourceDelta¿¡ ´ëÇØ Java ¿ä¼Ò µ¨Å¸´Â IWorkspaceRunnable¸¦ »ç¿ëÇÏ¿© Àϰýó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. IWorkspaceRunnable ³»¿¡¼ ½ÇÇàµÇ´Â ÀϺΠJava ¸ðµ¨·ÎºÎÅÍÀÇ µ¨Å¸ °á°ú´Â º´ÇյǾî Çѹø¿¡ º¸°íµË´Ï´Ù.
JavaCore ´Â Java ¿ä¼Ò º¯°æ»çÇ×À» Àϰýó¸® Çϱâ À§ÇÑ ½ÇÇà ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù.
¿¹¸¦ µé¾î, ´ÙÀ½ ÄÚµå ´ÜÆíÀº 2°³ÀÇ Java ¿ä¼Ò º¯°æ À̺¥Æ®¸¦ Æ®¸®°ÅÇÕ´Ï´Ù.
// Get package IPackageFragment pkg = ...; // Create 2 compilation units ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null); ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null);
¹Ý¸é¿¡ ´ÙÀ½ ÄÚµå ´ÜÆíÀº 1°³ÀÇ Java ¿ä¼Ò º¯°æ À̺¥Æ®¸¦ Æ®¸®°ÅÇÕ´Ï´Ù.
// Get package IPackageFragment pkg = ...; // Create 2 compilation units JavaCore.run( new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) throws CoreException { ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null); ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null); } }, null);