1 package org.apache.maven.tools.plugin.extractor.annotations.converter; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.net.URI; 23 import java.util.Optional; 24 25 import org.apache.maven.tools.plugin.extractor.annotations.converter.tag.block.JavadocBlockTagToHtmlConverter; 26 import org.apache.maven.tools.plugin.javadoc.FullyQualifiedJavadocReference; 27 import org.apache.maven.tools.plugin.javadoc.JavadocReference; 28 29 /** 30 * Context which is passed to {@link JavadocBlockTagsToXhtmlConverter}, {@link JavadocInlineTagsToXhtmlConverter}, 31 * {@link JavadocBlockTagToHtmlConverter} and {@link JavadocBlockTagToHtmlConverter}. 32 * It contains metadata about the container class and allows to resolve class or member names 33 * which are not fully qualified as well as creating (deep-) links to javadoc pages. 34 */ 35 public interface ConverterContext 36 { 37 /** 38 * 39 * @return the module name of the container class 40 */ 41 Optional<String> getModuleName(); 42 43 /** 44 * 45 * @return the package name of the container class 46 */ 47 String getPackageName(); 48 49 /** 50 * 51 * @param reference 52 * @return true in case either the current container class or any of its super classes are referenced 53 */ 54 boolean isReferencedBy( FullyQualifiedJavadocReference reference ); 55 56 /** 57 * 58 * @return a location text (human readable) indicating where in the container class the conversion is triggered 59 * (should be as specific as possible to ease debugging) 60 */ 61 String getLocation(); 62 63 /** 64 * Resolves a given javadoc reference, according to the rules of 65 * <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#JSWOR655"> 66 * Javadoc's search order</a>. 67 * @param reference the reference to resolve 68 * @return the resolved fully qualified reference 69 * @throws IllegalArgumentException in case the reference cannot be resolved 70 */ 71 FullyQualifiedJavadocReference resolveReference( JavadocReference reference ); 72 73 /** 74 * 75 * @return {@code true} if links to javadoc pages could potentially be generated with 76 * {@link #getUrl(FullyQualifiedJavadocReference)}. 77 */ 78 boolean canGetUrl(); 79 80 /** 81 * Returns a (deep-)link to the javadoc page for the given reference 82 * @param reference the reference for which to get the url 83 * @return the link 84 * @throws IllegalArgumentException in case no javadoc link could be generated for the given reference 85 * @throws IllegalStateException in case no javadoc source sites have been configured 86 * (i.e. {@link #canGetUrl()} returns {@code false}) 87 */ 88 URI getUrl( FullyQualifiedJavadocReference reference ); 89 90 /** 91 * Returns the value of a referenced static field. 92 * @param reference the code reference towards a static field 93 * @return the value of the static field given by the {@code reference} 94 * @throws IllegalArgumentException in case the reference does not point to a valid static field 95 */ 96 String getStaticFieldValue( FullyQualifiedJavadocReference reference ); 97 98 /** 99 * Returns the base url to use for internal javadoc links 100 * @return the base url for internal javadoc links (may be {@code null}). 101 */ 102 URI getInternalJavadocSiteBaseUrl(); 103 104 /** 105 * Stores some attribute in the current context 106 * @param <T> 107 * @param name 108 * @param value 109 * @return the old attribute value or null. 110 */ 111 <T> T setAttribute( String name, T value ); 112 113 /** 114 * Retrieves some attribute value from the current context. 115 * @param <T> 116 * @param name 117 * @param clazz 118 * @param defaultValue 119 * @return the value of the attribute with the given name or {@code null} if it does not exist 120 */ 121 <T> T getAttribute( String name, Class<T> clazz, T defaultValue ); 122 }