//: annotations/InterfaceExtractorProcessor.java
// APT-based annotation processing.
// {Exec: apt -factory
// annotations.InterfaceExtractorProcessorFactory
// Multiplier.java -s ../annotations}
package annotations;
import com.sun.mirror.apt.*;
import com.sun.mirror.declaration.*;
import java.io.*;
import java.util.*;public class InterfaceExtractorProcessor
  implements AnnotationProcessor {
  private final AnnotationProcessorEnvironment env;
  private ArrayList<MethodDeclaration> interfaceMethods =
    new ArrayList<MethodDeclaration>();
  public InterfaceExtractorProcessor(
    AnnotationProcessorEnvironment env) { this.env = env; }
  public void process() {
    for(TypeDeclaration typeDecl :
      env.getSpecifiedTypeDeclarations()) {
      ExtractInterface annot =
        typeDecl.getAnnotation(ExtractInterface.class);
      if(annot == null)
        break;
      for(MethodDeclaration m : typeDecl.getMethods())
        if(m.getModifiers().contains(Modifier.PUBLIC) &&
           !(m.getModifiers().contains(Modifier.STATIC)))
          interfaceMethods.add(m);
      if(interfaceMethods.size() > 0) {
        try {
          PrintWriter writer =
            env.getFiler().createSourceFile(annot.value());
          writer.println("package " +
            typeDecl.getPackage().getQualifiedName() +";");
          writer.println("public interface " +
            annot.value() + " {");
          for(MethodDeclaration m : interfaceMethods) {
            writer.print("  public ");
            writer.print(m.getReturnType() + " ");
            writer.print(m.getSimpleName() + " (");
            int i = 0;
            for(ParameterDeclaration parm :
              m.getParameters()) {
              writer.print(parm.getType() + " " +
                parm.getSimpleName());
              if(++i < m.getParameters().size())
                writer.print(", ");
            }
            writer.println(");");
          }
          writer.println("}");
          writer.close();
        } catch(IOException ioe) {
          throw new RuntimeException(ioe);
        }
      }
    }
  }
} ///:~这是Thinking in java 里面的源程序,但是好像找不到com.sun.mirror包样,我环境变量配置正确了的,请问问这是怎么回事啊?应该怎么改呢?

解决方案 »

  1.   

    在tools.jar这个包里,自己导入这个包,如果是命令行操作的,假如classpath中
      

  2.   

    呵呵,确实如此不过问一下楼主,ExtractInterface是在哪一个包里面呢?
      

  3.   

    你是用的eclipse或者myeclipse吧,引入一下
      

  4.   

    我用的是eclipse,但是还是不行啊~~只能导入解压厚的src源文件中的com.sun.mirror类,除此外还有什么解决方法么?以后要用不是要导入很多东西么?
      

  5.   

    看到 Referenced Libraries不,右键->build path->configure build path...,选择Add External Jars...,添加入tool.jar就可以
      

  6.   

    谢谢啦!已经解决这个问题了,唉~~初学Java真麻烦啊!
      

  7.   

    谢谢楼主的提问和justlearn的回答
    对我的帮助很大