package org.jboss.windup.rules.apps.java.scan.ast; import org.jboss.windup.ast.java.data.ResolutionStatus; import org.jboss.windup.ast.java.data.TypeReferenceLocation; import org.jboss.windup.graph.IndexType; import org.jboss.windup.graph.Indexed; import org.jboss.windup.graph.model.FileLocationModel; import org.jboss.windup.rules.apps.java.model.AbstractJavaSourceModel; import org.jboss.windup.rules.apps.java.model.JavaSourceFileModel; import org.jboss.windup.rules.apps.java.scan.ast.annotations.JavaAnnotationTypeReferenceModel; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.frames.Adjacency; import com.tinkerpop.frames.Property; import com.tinkerpop.frames.modules.javahandler.JavaHandler; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; import com.tinkerpop.frames.modules.typedgraph.TypeValue; /** * This references a particular location within a Java source file, as well as the contents of that location. */ @TypeValue(JavaTypeReferenceModel.TYPE) public interface JavaTypeReferenceModel extends FileLocationModel { String TYPE = "JavaTypeReference"; String REFERENCE_TYPE = "referenceType"; String RESOLVED_SOURCE_SNIPPIT = "resolvedSourceSnippit"; String RESOLUTION_STATUS = "resolutionStatus"; /** * Contains the annotations linked to this item. */ @Adjacency(label = JavaAnnotationTypeReferenceModel.ORIGINAL_ANNOTATED_TYPE, direction = Direction.IN) Iterable<JavaAnnotationTypeReferenceModel> getAnnotations(); /** * Overrides the default behavior to get the {@link JavaSourceFileModel} directly. */ @Override @Adjacency(label = FILE_MODEL, direction = Direction.OUT) AbstractJavaSourceModel getFile(); /** * Sets the snippit referenced by this {@link FileLocationModel}. */ @Property(RESOLVED_SOURCE_SNIPPIT) @Indexed(IndexType.SEARCH) void setResolvedSourceSnippit(String source); /** * Gets the snippit referenced by this {@link FileLocationModel}. */ @Property(RESOLVED_SOURCE_SNIPPIT) String getResolvedSourceSnippit(); /** * Contains the {@link TypeReferenceLocation} location referred to by this {@link Vertex}. */ @Property(REFERENCE_TYPE) TypeReferenceLocation getReferenceLocation(); /** * Contains the {@link TypeReferenceLocation} location referred to by this {@link Vertex}. */ @Property(REFERENCE_TYPE) @Indexed(IndexType.SEARCH) void setReferenceLocation(TypeReferenceLocation type); /** * Indicates whether or not we were able to resolve this reference based upon information available on the classpath */ @Property(RESOLUTION_STATUS) ResolutionStatus getResolutionStatus(); /** * Indicates whether or not we were able to resolve this reference based upon information available on the classpath */ @Property(RESOLUTION_STATUS) @Indexed void setResolutionStatus(ResolutionStatus status); /** * Gets a human readable description of the location in the file */ @JavaHandler String getDescription(); abstract class Impl implements JavaTypeReferenceModel, JavaHandlerContext<Vertex> { @Override public String getDescription() { TypeReferenceLocation location = getReferenceLocation(); return location.toReadablePrefix() + " '" + getResolvedSourceSnippit() + "'"; } } }