private void initAnnotationTargetMembers() {
        if (!sourceSpec.isAnnotation()) {
            return;
        }
        Method[] methods = getAnnotationClass().getDeclaredMethods();
        if (methods.length == 0) {
            return;
        }
        String target = getAnnotationTarget();
        Pattern pattern = Pattern.compile("\\$([A-Za-z][A-Za-z0-9]*)[^A-Za-z0-9]?");
        Matcher matcher = pattern.matcher(target);
        while (matcher.find()) {
            String group = matcher.group(1);
            for (Method method : methods) {
                if (method.getName().equals(group)) {
                    if (annotationTargetMembers == null) {
                        annotationTargetMembers = new LinkedHashSet<>();
                    }
                    annotationTargetMembers.add(method);
                    break;
                }
            }
        }
    }
Replace placeholders with actual values

<pre>$class</pre> represents class name
<pre>$line</pre> represents line number
<pre>$name</pre> represents method name or field name
<pre>$file</pre> represents file name
plugin/src/main/groovy/com/didichuxing/tools/droidassist/transform/SourceTargetTransformer.java