List of usage examples for org.eclipse.jdt.internal.codeassist SelectionEngine SelectionEngine
public SelectionEngine(SearchableEnvironment nameEnvironment, ISelectionRequestor requestor, Map settings,
WorkingCopyOwner owner)
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 w w. jav a 2 s. com*/ 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; }