package com.technophobia.substeps.document.content.view.hover.model.javadoc; import org.eclipse.jdt.core.IJavaProject; import com.technophobia.eclipse.javadoc.ProjectJavaDocLocator; import com.technophobia.substeps.glossary.StepDescriptor; import com.technophobia.substeps.model.SubSteps.Step; import com.technophobia.substeps.supplier.Transformer; public class JavaDocForBinaryStepLocator implements ProjectJavaDocLocator<StepImplTypeContext> { private final ProjectJavaDocLocator<StepImplTypeContext>[] subJavaDocBinaryStepLocators; @SuppressWarnings("unchecked") public JavaDocForBinaryStepLocator(final Transformer<StepDescriptor, String> stepDescriptorToStringTransformer) { // When looking at annotations for IMethods in binary types, the // annotations use just the full name this(new MethodWithAttachedJavadocLocator(new DefaultMethodForStepLocator(Step.class.getName() .replace('$', '.'))), new StepImplementationDescriptorJavadocLocator(stepDescriptorToStringTransformer)); } public JavaDocForBinaryStepLocator(final ProjectJavaDocLocator<StepImplTypeContext>... subJavaDocBinaryStepLocators) { this.subJavaDocBinaryStepLocators = subJavaDocBinaryStepLocators; } @Override public String formattedJavaDocFor(final StepImplTypeContext stepImplTypeContext, final IJavaProject project) { for (final ProjectJavaDocLocator<StepImplTypeContext> subJavaDocBinaryStepLocator : subJavaDocBinaryStepLocators) { final String javadoc = subJavaDocBinaryStepLocator.formattedJavaDocFor(stepImplTypeContext, project); if (javadoc != null) { return javadoc; } } return null; } }