1 24 25 package org.aspectj.compiler.base; 26 27 import org.aspectj.compiler.base.ast.*; 28 import org.aspectj.compiler.base.CompilerObject; 29 30 import java.util.*; 31 32 public abstract class ParallelCompilerPass extends CompilerObject implements CompilationUnitPass { 33 public ParallelCompilerPass(JavaCompiler compiler) { 34 super(compiler); 35 } 36 37 public abstract String getDisplayName(); 38 39 public double getWorkEstimate() { return 1.0; } 40 41 public int getNumThreads() { return getOptions().procs; } 42 43 private List cuList = new LinkedList(); 44 45 private int finished = 0; 46 47 public synchronized CompilationUnit getWorkCu() { 48 if (cuList.size() == 0) return null; 49 return (CompilationUnit)cuList.remove(0); 50 } 51 52 public synchronized void setFinished() { 53 finished += 1; 54 } 55 56 public void transformWorld() { 57 if (getDisplayName() != null) getCompiler().beginSection(getDisplayName()); 58 for (Iterator i = getWorld().getCompilationUnits().iterator(); i.hasNext(); ) { 59 CompilationUnit cu = (CompilationUnit)i.next(); 60 cuList.add(cu); 61 } 62 63 runThreads(); 64 } 65 66 class PassThread extends Thread { 67 public void run() { 68 CompilationUnit cu = getWorkCu(); 69 while (cu != null) { 70 transform(cu); 71 getCompiler().completedFile(ParallelCompilerPass.this, cu); 72 cu = getWorkCu(); 73 } 74 setFinished(); 75 } 76 } 77 78 void runThreads() { 79 for (int i = 0; i < getNumThreads(); i++) { 80 new PassThread().start(); 81 } 82 83 Thread myThread = Thread.currentThread(); 84 85 while (finished < getNumThreads()) { 86 try { 87 myThread.sleep(100); 88 } catch (InterruptedException ie) { 89 break; 90 } 91 } 92 } 93 94 95 public void transform(CompilationUnit cu) { 96 for (Iterator j = cu.getDefinedTypes().iterator(); j.hasNext(); ) { 97 TypeDec td = (TypeDec)j.next(); 98 transform(td); 99 } 100 } 101 102 public void transform(TypeDec td) { 103 } 104 } 105 106 | Popular Tags |