Kapt:如何读取注释及其参数

问题描述

上课:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;
import javafx.application.Platform;
import javafx.beans.value.changelistener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker.State;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class Test {
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokelater(new Runnable() {
            public void run() {
                try {
                    Test test = new Test("https://login.live.com");
                    test.frame.setVisible(true);
                } catch (Exception e) {
                    e.printstacktrace();
                }
            }
        });
    }

    private JFrame frame;
    
    public Test(String urlPath) {
        frame = new JFrame();
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100,100,600,400);
        JFXPanel jfxp = new JFXPanel();
        jfxp.setBorder(new EmptyBorder(5,6,6));
        frame.getContentPane().add(jfxp,BorderLayout.CENTER);
        frame.setBackground(Color.white);
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                WebView webView = new WebView();
             final WebEngine webEngine = webView.getEngine();
             webEngine.load(urlPath);
             webEngine.getLoadWorker().stateproperty().addListener(new changelistener<State>() 
                {
                    public void changed(ObservableValue<? extends State> ov,State oldState,State newState) 
                    {
                        if (newState == State.SUCCEEDED) 
                        {
                            String location = webEngine.getLocation();
                            System.out.println(location);
                            frame.setTitle(webEngine.getTitle());
                        }
                    }
                });
             VBox root = new VBox();
             root.getChildren().add(webView);
             Scene scene = new Scene(root);
             jfxp.setScene(scene);
            }
       });
    }
}

还有处理器:

@MarkerForKapt
@AnotherAnnotation(withParameter = "X")
class MyClass

如何从 class MyProcessor : AbstractProcessor() { override fun getSupportedAnnotationTypes() = setof(MarkerForKapt::class.qualifiedname) override fun process(annotations: Set<TypeElement>,roundEnv: RoundEnvironment): Boolean { val element = roundEnv.getElementsAnnotatedWith(MarkerForKapt::class.java).single() } } 读取值"X"

解决方法

将rt.jar添加到配置:

build.gradle.kts

    implementation(files("${System.getProperty("java.home")}/../lib/tools.jar"))

处理器:

import com.sun.tools.javac.code.Symbol


    override fun process(annotations: Set<TypeElement>,roundEnv: RoundEnvironment): Boolean {
  
        val element = roundEnv.getElementsAnnotatedWith(MarkerForKapt::class.java).single()
    

        element as Symbol.ClassSymbol

        val annotation: AnotherAnnotation? = element.getAnnotation(AnotherAnnotation::class.java)

        val theX = annotation?.withParameter
    }