Example usage for org.eclipse.jdt.internal.codeassist SelectionEngine select

List of usage examples for org.eclipse.jdt.internal.codeassist SelectionEngine select

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.codeassist SelectionEngine select.

Prototype

public void select(ICompilationUnit sourceUnit, int selectionSourceStart, int selectionSourceEnd) 

Source Link

Document

Ask the engine to compute the selection at the specified position of the given compilation unit.

Usage

From source file:org.eclipse.ajdt.core.text.ITDCodeSelection.java

License:Open Source License

public IJavaElement[] findJavaElement(IRegion wordRegion) throws JavaModelException {
    JavaProject javaProject = (JavaProject) unit.getJavaProject();
    SearchableEnvironment environment = new ITDAwareNameEnvironment(javaProject, unit.getOwner(), null);

    ITDAwareSelectionRequestor requestor = new ITDAwareSelectionRequestor(
            AJProjectModelFactory.getInstance().getModelForJavaElement(javaProject), unit);
    /* AJDT 1.7 */
    SelectionEngine engine = new SelectionEngine(environment, requestor, javaProject.getOptions(true),
            unit.getOwner());/*from   w ww  .  ja  va 2 s. c om*/

    final AspectsConvertingParser converter = new AspectsConvertingParser(
            ((CompilationUnit) unit).getContents());
    converter.setUnit(unit);
    ArrayList<Replacement> replacements = converter.convert(ConversionOptions.CODE_COMPLETION);

    org.eclipse.jdt.internal.compiler.env.ICompilationUnit wrappedUnit = new CompilationUnit(
            (PackageFragment) unit.getParent(), unit.getElementName(), unit.getOwner()) {
        public char[] getContents() {
            return converter.content;
        }
    };
    int transformedStart = AspectsConvertingParser.translatePositionToAfterChanges(wordRegion.getOffset(),
            replacements);
    int transformedEnd = AspectsConvertingParser
            .translatePositionToAfterChanges(wordRegion.getOffset() + wordRegion.getLength(), replacements) - 1;
    requestor.setReplacements(replacements);
    engine.select(wrappedUnit, transformedStart, transformedEnd);

    // maybe perform code select again.  If we are inside of an ITD method
    // must check for ITD references to the target type
    IntertypeElement itd = itdOrNull(unit, wordRegion.getOffset());
    if (itd != null && (itd.getAJKind() == IProgramElement.Kind.INTER_TYPE_METHOD
            || itd.getAJKind() == IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR)) {
        char[] targetType = itd.getTargetType();

        final AspectsConvertingParser converter2 = new AspectsConvertingParser(
                ((CompilationUnit) unit).getContents());
        converter2.setUnit(unit);
        ArrayList<Replacement> replacements2 = converter2.convert(
                ConversionOptions.getCodeCompletionOptionWithContextSwitch(wordRegion.getOffset(), targetType));
        wrappedUnit = new CompilationUnit((PackageFragment) unit.getParent(), unit.getElementName(),
                unit.getOwner()) {
            public char[] getContents() {
                return converter2.content;
            }
        };
        transformedStart = AspectsConvertingParser.translatePositionToAfterChanges(wordRegion.getOffset(),
                replacements2);
        transformedEnd = AspectsConvertingParser.translatePositionToAfterChanges(
                wordRegion.getOffset() + wordRegion.getLength(), replacements2) - 1;
        requestor.setReplacements(replacements2);

        SelectionEngine engine2 = new SelectionEngine(environment, requestor, javaProject.getOptions(true),
                unit.getOwner());
        engine2.select(wrappedUnit, transformedStart, transformedEnd);
    }

    IJavaElement[] elements = requestor.getElements();
    if (itd != null && elements.length == 0) {
        // maybe we are selecting on the name of the itd itself
        ISourceRange nameRange = itd.getNameRange();
        if (nameRange.getOffset() <= wordRegion.getOffset() && (nameRange.getOffset()
                + nameRange.getLength()) >= (wordRegion.getOffset() + wordRegion.getLength())) {
            elements = new IJavaElement[] { itd };
        }

        // maybe we are selecting the target type of the itd
        ISourceRange targetNameRange = itd.getTargetTypeSourceRange();
        if (targetNameRange.getOffset() <= wordRegion.getOffset() && (targetNameRange.getOffset()
                + targetNameRange.getLength()) >= (wordRegion.getOffset() + wordRegion.getLength())) {
            IType targetType = itd.findTargetType();
            if (targetType != null) { // will be null if model not initialized
                elements = new IJavaElement[] { targetType };
            }
        }
    }
    return elements;
}