2013-03-05 5 views
1

Java 파일에서 테스트 및 테이블 클래스를 생성하는 플러그인을 개발하려고합니다 ... Java 소스를 선택하면 "생성"옵션을 가질 수 있습니다. 클래스 테스트 ", 그 문제는 내가 ICompliationUnit로 자바 파일을 회복 오전, 그 방법은 xtract 개체의, 그 이유는 무엇입니까; I가 나타내는 클래스의 인스턴스에 IComplilationUnit을 구문 분석 할, 내가 Class.forName를 사용하여 시도했지만 작동하지 않는, 즉 코드입니다 :컴파일 유닛에서 객체를 인스턴스화하는 방법

private void write(String dir, ICompilationUnit cu) throws JavaModelException 
    { 

     try 
     { 
     cu.getCorrespondingResource().getName(); 
     System.out.println("0000000000000" + cu.getJavaProject().getProject().toString()); 
     } 
     catch (JavaModelException e1) 
     { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
     } 
     String test = cu.getCorrespondingResource().getName(); 
     IPackageDeclaration[] test1 = cu.getPackageDeclarations(); 
     // Need 
     String[] name = test.split("\\."); 

     String contentFile = dir + "\\" + name[0] + "content.txt"; 
     GenerateFitnessTable inst = new GenerateFitnessTable(); 
     try 
     { 

     String pack = test1[0].toString().substring(7, test1[0].toString().indexOf("[") - 1) + "." + name[0]; 
     @SuppressWarnings("rawtypes") 
     Class classe = Class.forName(cu.getJavaProject().getProject().toString() 
        .substring(cu.getJavaProject().getProject().toString().indexOf("/"), cu.getJavaProject().getProject().toString().length()) 
        + pack); 
     try 
     { 
      classe.newInstance(); 
     } 
     catch (InstantiationException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (IllegalAccessException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 

     catch (ClassNotFoundException e1) 
     { 
     System.out.print("****************************la classe n'existe pas"); 
     } 
     try 
     { 
     inst.generateContent(cu, contentFile); 
     } 
     catch (IOException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

답변

0

이 올바른 방법)), 나는 그것을 발견 :

// nouveau region 
    region = JavaCore.newRegion(); 
    // ajout de la classe selectionné a cette region 
    region.add(cu); 

    if (JavaCore.getGeneratedResources(region, true).length == 0) 
    { 
     // bug 

    } 
    // recuperer l'url de .class 
    String url = "file:" + JavaCore.getGeneratedResources(region, true)[0].getLocation().makeAbsolute(); 
    URL myUrl = new URL(url); 
    URLConnection connection = myUrl.openConnection(); 
    InputStream input = connection.getInputStream(); 
    ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
    int data = input.read(); 

    while (data != -1) 
    { 
     buffer.write(data); 
     data = input.read(); 
    } 

    input.close(); 

    byte[] classData = buffer.toByteArray(); 

    clas = defineClass(pack.substring(1, pack.length()), classData, 0, classData.length); 
+0

나는 그것이 올바른 방법은 아니라고 확신하지만, 올바른 방법이 있는지는 모르겠다. (당신은 JDT DOM API를 사용하여 소스 코드를 파싱 할 수있다) – immibis

관련 문제