Example usage for org.eclipse.jdt.core IJavaElement getAncestor

List of usage examples for org.eclipse.jdt.core IJavaElement getAncestor

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IJavaElement getAncestor.

Prototype

IJavaElement getAncestor(int ancestorType);

Source Link

Document

Returns this Java element or the first ancestor of this element that has the given type.

Usage

From source file:org.eclipse.fx.ide.jdt.ui.internal.FXBeanJavaCompletionProposalComputer.java

License:Open Source License

@Override
public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context,
        IProgressMonitor monitor) {/* w  ww  .  j  a  v a 2  s.c  o m*/
    if (context instanceof JavaContentAssistInvocationContext && Boolean.FALSE == true) {
        JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context;
        CompletionContext completionContext = javaContext.getCoreContext();
        IJavaElement enclosingElement = null;
        if (completionContext.isExtended()) {
            enclosingElement = completionContext.getEnclosingElement();
        } else {
            try {
                enclosingElement = javaContext.getCompilationUnit()
                        .getElementAt(context.getInvocationOffset() + 1);
            } catch (JavaModelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        List<ICompletionProposal> l = new ArrayList<ICompletionProposal>();

        if (enclosingElement != null) {
            IType type = (IType) enclosingElement.getAncestor(IJavaElement.TYPE);
            if (type == null) {
                return l;
            }

            try {
                IField[] fields = type.getFields();
                IMethod[] methods = type.getMethods();
                int offset = context.getInvocationOffset() - 3;
                if (offset > 0) {
                    String prefix = context.getDocument().get(offset, 3);
                    IType propType = type.getJavaProject().findType("javafx.beans.property.Property");
                    IType writableType = type.getJavaProject().findType("javafx.beans.value.WritableValue");

                    // Primitives
                    IType booleanType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyBooleanProperty");
                    IType doubleType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyDoubleProperty");
                    IType floatType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyFloatProperty");
                    IType intType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyIntegerProperty");
                    IType longType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyLongProperty");
                    IType stringType = type.getJavaProject()
                            .findType("javafx.beans.property.ReadOnlyStringProperty");

                    for (int i = 0; i < fields.length; i++) {
                        IField curr = fields[i];
                        if (!Flags.isEnum(curr.getFlags())) {
                            IType fieldType = toType(type, curr.getTypeSignature());
                            if (fieldType != null) {
                                if (assignable(fieldType, propType)) {
                                    if ("set".equals(prefix)) {
                                        if (assignable(fieldType, writableType)) {
                                            String setterName = NamingConventions.suggestSetterName(
                                                    type.getJavaProject(), curr.getElementName(),
                                                    curr.getFlags(), false, null);
                                            if (!hasMethod(methods, setterName)) {
                                                StyledString s = new StyledString(setterName + "(" //$NON-NLS-1$
                                                        + toValue(fieldType, booleanType, doubleType, floatType,
                                                                intType, longType, stringType)
                                                        + ")" + " : void");
                                                s.append(" - Setter for '" + curr.getElementName() + "'", //$NON-NLS-1$//$NON-NLS-2$
                                                        StyledString.QUALIFIER_STYLER);
                                                l.add(new CompletionProposalImpl(setterName, s, setterName + "("
                                                        + toValue(fieldType, booleanType, doubleType, floatType,
                                                                intType, longType, stringType)
                                                        + " " + curr.getElementName() + ")", curr, Type.SETTER,
                                                        offset));
                                            }
                                        }
                                    } else if (Character.isWhitespace(prefix.charAt(0))
                                            && prefix.endsWith("is")) {
                                        if (assignable(fieldType, booleanType)) {
                                            String getterName = NamingConventions.suggestGetterName(
                                                    type.getJavaProject(), curr.getElementName(),
                                                    curr.getFlags(), false, null);
                                            getterName = "is" + getterName.substring(3);
                                            if (!hasMethod(methods, getterName)) {
                                                StyledString s = new StyledString(getterName + "() : boolean");
                                                s.append(" - Getter for '" + curr.getElementName() + "'",
                                                        StyledString.QUALIFIER_STYLER);
                                                l.add(new CompletionProposalImpl(getterName, s,
                                                        getterName + "()", curr, Type.GETTER, offset));
                                            }
                                        }
                                    } else if ("get".equals(prefix)) {
                                        if (!assignable(fieldType, booleanType)) {
                                            String getterName = NamingConventions.suggestGetterName(
                                                    type.getJavaProject(), curr.getElementName(),
                                                    curr.getFlags(), false, null);
                                            if (!hasMethod(methods, getterName)) {
                                                StyledString s = new StyledString(getterName + "() : "
                                                        + toValue(fieldType, booleanType, doubleType, floatType,
                                                                intType, longType, stringType));
                                                s.append(" - Getter for '" + curr.getElementName() + "'",
                                                        StyledString.QUALIFIER_STYLER);
                                                l.add(new CompletionProposalImpl(getterName, s,
                                                        toValue(fieldType, booleanType, doubleType, floatType,
                                                                intType, longType, stringType) + " "
                                                                + getterName + "()",
                                                        curr, Type.GETTER, offset));
                                            }
                                        }
                                    } else if (Character.isWhitespace(prefix.charAt(2))) {
                                        String propertyName = curr.getElementName() + "Property() : "
                                                + fieldType.getElementName();
                                        if (!hasMethod(methods, propertyName)) {
                                            StyledString s = new StyledString(propertyName);
                                            l.add(new CompletionProposalImpl(
                                                    propertyName, s, fieldType.getElementName() + " "
                                                            + curr.getElementName() + "Property()",
                                                    curr, Type.ACCESSOR, offset));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

            } catch (JavaModelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (BadLocationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return l;
    }
    return Collections.emptyList();
}

From source file:org.eclipse.fx.ide.jdt.ui.internal.handler.AddFXBeanGetterSetterHandler.java

License:Open Source License

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    Shell s = HandlerUtil.getActiveShell(event);
    ISelection selection = HandlerUtil.getCurrentSelection(event);

    IType type = null;//from  w ww . j  a v  a 2s.c  om

    if (selection instanceof ITextSelection) {
        JavaEditor editor = (JavaEditor) HandlerUtil.getActiveEditor(event);
        try {
            IJavaElement[] items = SelectionConverter.codeResolveForked((editor), true);
            if (items.length > 0) {
                type = (IType) items[0].getAncestor(IJavaElement.TYPE);
            } else {
                IJavaElement element = SelectionConverter.getElementAtOffset(editor);
                if (element != null) {
                    type = (IType) element.getAncestor(IJavaElement.TYPE);
                }
            }
        } catch (InvocationTargetException | InterruptedException | JavaModelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else if (selection instanceof IStructuredSelection) {
        IStructuredSelection selected = (IStructuredSelection) selection;
        Object firstelement = selected.getFirstElement();
        try {
            if (firstelement instanceof IType) {
                type = (IType) firstelement;
            } else if (firstelement instanceof ICompilationUnit) {
                type = ((ICompilationUnit) firstelement).findPrimaryType();
            } else if (firstelement instanceof IField) {
                type = ((IField) firstelement).getDeclaringType();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    if (type != null) {
        GetterSetterDialog dialog = new GetterSetterDialog(s, type);
        dialog.open();
    } else {
        MessageDialog.openInformation(s, ActionMessages.AddGetterSetterAction_error_title,
                ActionMessages.AddGetterSetterAction_not_applicable);
    }
    return null;
}

From source file:org.eclipse.incquery.tooling.ui.wizards.NewEiqFileWizardContainerConfigurationPage.java

License:Open Source License

/**
 * Initialization based on the current selection.
 * //from w  w  w  .ja  v a2s.c om
 * @param selection
 *            the current selection in the workspace
 */
public void init(IStructuredSelection selection) {
    IJavaElement jElement = getInitialJavaElement(selection);
    initContainerPage(jElement);

    if (jElement != null) {
        IPackageFragment pack = (IPackageFragment) jElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
        setPackageFragment(pack, true);
    }

    packageChanged();
}

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

public static IBinding[] resolve(final IJavaElement[] elements, int apiLevel, Map compilerOptions,
        IJavaProject javaProject, WorkingCopyOwner owner, int flags, IProgressMonitor monitor) {

    final int length = elements.length;
    final HashMap sourceElementPositions = new HashMap(); // a map from ICompilationUnit to int[] (positions in elements)
    int cuNumber = 0;
    final HashtableOfObjectToInt binaryElementPositions = new HashtableOfObjectToInt(); // a map from String (binding key) to int (position in elements)
    for (int i = 0; i < length; i++) {
        IJavaElement element = elements[i];
        if (!(element instanceof SourceRefElement))
            throw new IllegalStateException(element + " is not part of a compilation unit or class file"); //$NON-NLS-1$
        Object cu = element.getAncestor(IJavaElement.COMPILATION_UNIT);
        if (cu != null) {
            // source member
            IntArrayList intList = (IntArrayList) sourceElementPositions.get(cu);
            if (intList == null) {
                sourceElementPositions.put(cu, intList = new IntArrayList());
                cuNumber++;/*from w  ww  . j a v a2 s . c  o m*/
            }
            intList.add(i);
        } else {
            // binary member
            try {
                String key = ((BinaryMember) element).getKey(true/*open to get resolved info*/);
                binaryElementPositions.put(key, i);
            } catch (JavaModelException e) {
                throw new IllegalArgumentException(element + " does not exist"); //$NON-NLS-1$
            }
        }
    }
    ICompilationUnit[] cus = new ICompilationUnit[cuNumber];
    sourceElementPositions.keySet().toArray(cus);

    int bindingKeyNumber = binaryElementPositions.size();
    String[] bindingKeys = new String[bindingKeyNumber];
    binaryElementPositions.keysToArray(bindingKeys);

    class Requestor extends ASTRequestor {
        IBinding[] bindings = new IBinding[length];

        public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
            // TODO (jerome) optimize to visit the AST only once
            IntArrayList intList = (IntArrayList) sourceElementPositions.get(source);
            for (int i = 0; i < intList.length; i++) {
                final int index = intList.list[i];
                SourceRefElement element = (SourceRefElement) elements[index];
                DOMFinder finder = new DOMFinder(ast, element, true/*resolve binding*/);
                try {
                    finder.search();
                } catch (JavaModelException e) {
                    throw new IllegalArgumentException(element + " does not exist"); //$NON-NLS-1$
                }
                this.bindings[index] = finder.foundBinding;
            }
        }

        public void acceptBinding(String bindingKey, IBinding binding) {
            int index = binaryElementPositions.get(bindingKey);
            this.bindings[index] = binding;
        }
    }
    Requestor requestor = new Requestor();
    resolve(cus, bindingKeys, requestor, apiLevel, compilerOptions, javaProject, owner, flags, monitor);
    return requestor.bindings;
}

From source file:org.eclipse.jdt.internal.core.JavaProject.java

License:Open Source License

public boolean isOnClasspath(IJavaElement element) {
    IClasspathEntry[] rawClasspath;/*  ww w  .  java  2  s.co  m*/
    try {
        rawClasspath = getRawClasspath();
    } catch (JavaModelException e) {
        return false; // not a Java project
    }
    int elementType = element.getElementType();
    boolean isPackageFragmentRoot = false;
    boolean isFolderPath = false;
    boolean isSource = false;
    switch (elementType) {
    case IJavaElement.JAVA_MODEL:
        return false;
    case IJavaElement.JAVA_PROJECT:
        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        isPackageFragmentRoot = true;
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        isFolderPath = !((IPackageFragmentRoot) element.getParent()).isArchive();
        break;
    case IJavaElement.COMPILATION_UNIT:
        isSource = true;
        break;
    default:
        isSource = element.getAncestor(IJavaElement.COMPILATION_UNIT) != null;
        break;
    }
    IPath elementPath = element.getPath();

    // first look at unresolved entries
    int length = rawClasspath.length;
    for (int i = 0; i < length; i++) {
        IClasspathEntry entry = rawClasspath[i];
        switch (entry.getEntryKind()) {
        case IClasspathEntry.CPE_LIBRARY:
        case IClasspathEntry.CPE_PROJECT:
        case IClasspathEntry.CPE_SOURCE:
            if (isOnClasspathEntry(elementPath, isFolderPath, isPackageFragmentRoot, entry))
                return true;
            break;
        }
    }

    // no need to go further for compilation units and elements inside a compilation unit
    // it can only be in a source folder, thus on the raw classpath
    if (isSource)
        return false;

    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=304081
    // All the resolved classpath entries need to be considered, including the referenced classpath entries
    IClasspathEntry[] resolvedClasspath = null;
    try {
        resolvedClasspath = getResolvedClasspath();
    } catch (JavaModelException e) {
        return false; // Perhaps, not a Java project
    }

    for (int index = 0; index < resolvedClasspath.length; index++) {
        if (isOnClasspathEntry(elementPath, isFolderPath, isPackageFragmentRoot, resolvedClasspath[index]))
            return true;
    }

    return false;
}

From source file:org.eclipse.jdt.internal.core.search.matching.MatchLocator.java

License:Open Source License

private boolean filterEnum(SearchMatch match) {

    // filter org.apache.commons.lang.enum package for projects above 1.5 
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264   
    IJavaElement element = (IJavaElement) match.getElement();
    PackageFragment pkg = (PackageFragment) element.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
    if (pkg != null) {
        // enum was found in org.apache.commons.lang.enum at index 5
        if (pkg.names.length == 5 && pkg.names[4].equals("enum")) { //$NON-NLS-1$
            if (this.options == null) {
                IJavaProject proj = (IJavaProject) pkg.getAncestor(IJavaElement.JAVA_PROJECT);
                String complianceStr = proj.getOption(CompilerOptions.OPTION_Source, true);
                if (CompilerOptions.versionToJdkLevel(complianceStr) >= ClassFileConstants.JDK1_5)
                    return true;
            } else if (this.options.sourceLevel >= ClassFileConstants.JDK1_5) {
                return true;
            }//  ww  w . j av a  2s. c  o m
        }
    }
    return false;
}

From source file:org.eclipse.jst.j2ee.internal.common.operations.JavaModelUtil.java

License:Open Source License

public static boolean isExceptionToBeLogged(CoreException exception) {
    if (!(exception instanceof JavaModelException))
        return true;
    JavaModelException je = (JavaModelException) exception;
    if (!je.isDoesNotExist())
        return true;
    IJavaElement[] elements = je.getJavaModelStatus().getElements();
    for (int i = 0; i < elements.length; i++) {
        IJavaElement element = elements[i];
        // if the element is already a compilation unit don't log
        // does not exist exceptions. See bug 
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=75894
        // for more details
        if (element.getElementType() == IJavaElement.COMPILATION_UNIT)
            continue;
        ICompilationUnit unit = (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT);
        if (unit == null)
            return true;
        if (!unit.isWorkingCopy())
            return true;
    }/*w  w  w  .java2 s  . c om*/
    return false;
}

From source file:org.eclipse.jst.j2ee.internal.common.operations.JavaModelUtil.java

License:Open Source License

private static void addAllCus(HashSet/*<ICompilationUnit>*/ collector, IJavaElement javaElement)
        throws JavaModelException {
    switch (javaElement.getElementType()) {
    case IJavaElement.JAVA_PROJECT:
        IJavaProject javaProject = (IJavaProject) javaElement;
        IPackageFragmentRoot[] packageFragmentRoots = javaProject.getPackageFragmentRoots();
        for (int i = 0; i < packageFragmentRoots.length; i++)
            addAllCus(collector, packageFragmentRoots[i]);
        return;/* ww  w.j a  v a 2 s  .  c o  m*/

    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) javaElement;
        if (packageFragmentRoot.getKind() != IPackageFragmentRoot.K_SOURCE)
            return;
        IJavaElement[] packageFragments = packageFragmentRoot.getChildren();
        for (int j = 0; j < packageFragments.length; j++)
            addAllCus(collector, packageFragments[j]);
        return;

    case IJavaElement.PACKAGE_FRAGMENT:
        IPackageFragment packageFragment = (IPackageFragment) javaElement;
        collector.addAll(Arrays.asList(packageFragment.getCompilationUnits()));
        return;

    case IJavaElement.COMPILATION_UNIT:
        collector.add(javaElement);
        return;

    default:
        IJavaElement cu = javaElement.getAncestor(IJavaElement.COMPILATION_UNIT);
        if (cu != null)
            collector.add(cu);
    }
}

From source file:org.eclipse.jst.jsf.common.ui.internal.utils.JavaModelUtil.java

License:Open Source License

/**
 * http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
 * /*from w  w w .j av a  2  s  . co  m*/
 * Reconciling happens in a separate thread. This can cause a situation
 * where the Java element gets disposed after an exists test has been done.
 * So we should not log not present exceptions when they happen in working
 * copies.
 * @param exception 
 * @return true if filter not present
 */
public static boolean filterNotPresentException(CoreException exception) {
    if (!(exception instanceof JavaModelException)) {
        return true;
    }
    JavaModelException je = (JavaModelException) exception;
    if (!je.isDoesNotExist()) {
        return true;
    }
    IJavaElement[] elements = je.getJavaModelStatus().getElements();
    for (int i = 0; i < elements.length; i++) {
        IJavaElement element = elements[i];
        ICompilationUnit unit = (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT);
        if (unit == null) {
            return true;
        }
        if (!unit.isWorkingCopy()) {
            return true;
        }
    }
    return false;
}

From source file:org.eclipse.jst.jsf.ui.internal.jspeditor.BeanSuffixHyperlink.java

License:Open Source License

public String getHyperlinkText() {
    //Bug 254452 - JSF hyperlink provider shows "unknown hyperlink" when in list
    final IJavaElement element = determineJavaElement();
    if (element != null) {
        final ICompilationUnit compilationUnit = (ICompilationUnit) element
                .getAncestor(IJavaElement.COMPILATION_UNIT);
        if (compilationUnit != null) {
            return NLS.bind(Messages.Hyperlink_Open_JavaMethod, compilationUnit.getElementName(),
                    element.getElementName());
        }// w ww.  j  av a 2s  .  c om
        return Messages.Hyperlink_Open_JavaFile;
    }
    return Messages.Hyperlink_Open_JavaElement;
}