Search in sources :

Example 21 with IField

use of org.eclipse.jdt.core.IField in project che by eclipse.

the class MemberVisibilityAdjustor method computeOutgoingVisibilityThreshold.

/**
	 * Computes the visibility threshold for the referenced element.
	 *
	 * @param referencing the referencing element
	 * @param referenced the referenced element
	 * @param monitor the progress monitor to use
	 * @return the visibility keyword corresponding to the threshold, or <code>null</code> for default visibility
	 * @throws JavaModelException if the java elements could not be accessed
	 */
private ModifierKeyword computeOutgoingVisibilityThreshold(final IJavaElement referencing, final IMember referenced, final IProgressMonitor monitor) throws JavaModelException {
    Assert.isTrue(referencing instanceof ICompilationUnit || referencing instanceof IType || referencing instanceof IPackageFragment);
    Assert.isTrue(referenced instanceof IType || referenced instanceof IField || referenced instanceof IMethod);
    ModifierKeyword keyword = ModifierKeyword.PUBLIC_KEYWORD;
    try {
        //$NON-NLS-1$
        monitor.beginTask("", 1);
        monitor.setTaskName(RefactoringCoreMessages.MemberVisibilityAdjustor_checking);
        final int referencingType = referencing.getElementType();
        final int referencedType = referenced.getElementType();
        switch(referencedType) {
            case IJavaElement.TYPE:
                {
                    final IType typeReferenced = (IType) referenced;
                    switch(referencingType) {
                        case IJavaElement.COMPILATION_UNIT:
                            {
                                final ICompilationUnit unit = (ICompilationUnit) referencing;
                                final ICompilationUnit referencedUnit = typeReferenced.getCompilationUnit();
                                if (referencedUnit != null && referencedUnit.equals(unit))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.getParent().equals(unit.getParent()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToType((IType) referencing, typeReferenced, monitor);
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (typeReferenced.getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            case IJavaElement.FIELD:
                {
                    final IField fieldReferenced = (IField) referenced;
                    final ICompilationUnit referencedUnit = fieldReferenced.getCompilationUnit();
                    switch(referencingType) {
                        case IJavaElement.COMPILATION_UNIT:
                            {
                                final ICompilationUnit unit = (ICompilationUnit) referencing;
                                if (referencedUnit != null && referencedUnit.equals(unit))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.getParent().equals(unit.getParent()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToField((IType) referencing, fieldReferenced, monitor);
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (fieldReferenced.getDeclaringType().getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            case IJavaElement.METHOD:
                {
                    final IMethod methodReferenced = (IMethod) referenced;
                    final ICompilationUnit referencedUnit = methodReferenced.getCompilationUnit();
                    switch(referencingType) {
                        case IJavaElement.COMPILATION_UNIT:
                            {
                                final ICompilationUnit unit = (ICompilationUnit) referencing;
                                if (referencedUnit != null && referencedUnit.equals(unit))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.getParent().equals(unit.getParent()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToMethod((IType) referencing, methodReferenced, monitor);
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (methodReferenced.getDeclaringType().getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            default:
                Assert.isTrue(false);
        }
    } finally {
        monitor.done();
    }
    return keyword;
}
Also used : ICompilationUnit(org.eclipse.jdt.core.ICompilationUnit) IPackageFragment(org.eclipse.jdt.core.IPackageFragment) ModifierKeyword(org.eclipse.jdt.core.dom.Modifier.ModifierKeyword) IMethod(org.eclipse.jdt.core.IMethod) IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType)

Example 22 with IField

use of org.eclipse.jdt.core.IField in project che by eclipse.

the class MemberVisibilityAdjustor method getVisibilityThreshold.

/**
	 * Computes the visibility threshold for the referenced element.
	 *
	 * @param referencing the referencing element
	 * @param referenced the referenced element
	 * @param monitor the progress monitor to use
	 * @return the visibility keyword corresponding to the threshold, or <code>null</code> for default visibility
	 * @throws JavaModelException if the java elements could not be accessed
	 */
public ModifierKeyword getVisibilityThreshold(final IJavaElement referencing, final IMember referenced, final IProgressMonitor monitor) throws JavaModelException {
    Assert.isTrue(!(referencing instanceof IInitializer));
    Assert.isTrue(!(referenced instanceof IInitializer));
    ModifierKeyword keyword = ModifierKeyword.PUBLIC_KEYWORD;
    try {
        //$NON-NLS-1$
        monitor.beginTask("", 1);
        monitor.setTaskName(RefactoringCoreMessages.MemberVisibilityAdjustor_checking);
        final int referencingType = referencing.getElementType();
        final int referencedType = referenced.getElementType();
        switch(referencedType) {
            case IJavaElement.TYPE:
                {
                    final IType typeReferenced = (IType) referenced;
                    final ICompilationUnit referencedUnit = typeReferenced.getCompilationUnit();
                    switch(referencingType) {
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToType((IType) referencing, typeReferenced, monitor);
                                break;
                            }
                        case IJavaElement.FIELD:
                        case IJavaElement.METHOD:
                            {
                                final IMember member = (IMember) referencing;
                                if (typeReferenced.equals(member.getDeclaringType()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.equals(member.getCompilationUnit()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (typeReferenced.getPackageFragment().equals(member.getDeclaringType().getPackageFragment()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (typeReferenced.getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            case IJavaElement.FIELD:
                {
                    final IField fieldReferenced = (IField) referenced;
                    final ICompilationUnit referencedUnit = fieldReferenced.getCompilationUnit();
                    switch(referencingType) {
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToField((IType) referencing, fieldReferenced, monitor);
                                break;
                            }
                        case IJavaElement.FIELD:
                        case IJavaElement.METHOD:
                            {
                                final IMember member = (IMember) referencing;
                                if (fieldReferenced.getDeclaringType().equals(member.getDeclaringType()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.equals(member.getCompilationUnit()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (fieldReferenced.getDeclaringType().getPackageFragment().equals(member.getDeclaringType().getPackageFragment()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (fieldReferenced.getDeclaringType().getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            case IJavaElement.METHOD:
                {
                    final IMethod methodReferenced = (IMethod) referenced;
                    final ICompilationUnit referencedUnit = methodReferenced.getCompilationUnit();
                    switch(referencingType) {
                        case IJavaElement.TYPE:
                            {
                                keyword = thresholdTypeToMethod((IType) referencing, methodReferenced, monitor);
                                break;
                            }
                        case IJavaElement.FIELD:
                        case IJavaElement.METHOD:
                            {
                                final IMember member = (IMember) referencing;
                                if (methodReferenced.getDeclaringType().equals(member.getDeclaringType()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (referencedUnit != null && referencedUnit.equals(member.getCompilationUnit()))
                                    keyword = ModifierKeyword.PRIVATE_KEYWORD;
                                else if (methodReferenced.getDeclaringType().getPackageFragment().equals(member.getDeclaringType().getPackageFragment()))
                                    keyword = null;
                                break;
                            }
                        case IJavaElement.PACKAGE_FRAGMENT:
                            {
                                final IPackageFragment fragment = (IPackageFragment) referencing;
                                if (methodReferenced.getDeclaringType().getPackageFragment().equals(fragment))
                                    keyword = null;
                                break;
                            }
                        default:
                            Assert.isTrue(false);
                    }
                    break;
                }
            default:
                Assert.isTrue(false);
        }
    } finally {
        monitor.done();
    }
    return keyword;
}
Also used : ICompilationUnit(org.eclipse.jdt.core.ICompilationUnit) IPackageFragment(org.eclipse.jdt.core.IPackageFragment) ModifierKeyword(org.eclipse.jdt.core.dom.Modifier.ModifierKeyword) IInitializer(org.eclipse.jdt.core.IInitializer) IMethod(org.eclipse.jdt.core.IMethod) IField(org.eclipse.jdt.core.IField) IMember(org.eclipse.jdt.core.IMember) IType(org.eclipse.jdt.core.IType)

Example 23 with IField

use of org.eclipse.jdt.core.IField in project che by eclipse.

the class FieldProposalInfo method resolveMember.

/**
	 * Resolves the member described by the receiver and returns it if found.
	 * Returns <code>null</code> if no corresponding member can be found.
	 *
	 * @return the resolved member or <code>null</code> if none is found
	 * @throws org.eclipse.jdt.core.JavaModelException if accessing the java model fails
	 */
@Override
protected IMember resolveMember() throws JavaModelException {
    char[] declarationSignature = fProposal.getDeclarationSignature();
    // TODO remove when https://bugs.eclipse.org/bugs/show_bug.cgi?id=84690 gets fixed
    if (declarationSignature == null)
        return null;
    String typeName = SignatureUtil.stripSignatureToFQN(String.valueOf(declarationSignature));
    IType type = fJavaProject.findType(typeName);
    if (type != null) {
        String name = String.valueOf(fProposal.getName());
        IField field = type.getField(name);
        if (field.exists())
            return field;
    }
    return null;
}
Also used : IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType)

Example 24 with IField

use of org.eclipse.jdt.core.IField in project che by eclipse.

the class GetterSetterCompletionProposal method evaluateProposals.

public static void evaluateProposals(IType type, String prefix, int offset, int length, int relevance, Set<String> suggestedMethods, Collection<IJavaCompletionProposal> result) throws CoreException {
    if (prefix.length() == 0) {
        relevance--;
    }
    IField[] fields = type.getFields();
    IMethod[] methods = type.getMethods();
    for (int i = 0; i < fields.length; i++) {
        IField curr = fields[i];
        if (!JdtFlags.isEnum(curr)) {
            String getterName = GetterSetterUtil.getGetterName(curr, null);
            if (Strings.startsWithIgnoreCase(getterName, prefix) && !hasMethod(methods, getterName)) {
                suggestedMethods.add(getterName);
                int getterRelevance = relevance;
                if (JdtFlags.isStatic(curr) && JdtFlags.isFinal(curr))
                    getterRelevance = relevance - 1;
                result.add(new GetterSetterCompletionProposal(curr, offset, length, true, getterRelevance));
            }
            if (!JdtFlags.isFinal(curr)) {
                String setterName = GetterSetterUtil.getSetterName(curr, null);
                if (Strings.startsWithIgnoreCase(setterName, prefix) && !hasMethod(methods, setterName)) {
                    suggestedMethods.add(setterName);
                    result.add(new GetterSetterCompletionProposal(curr, offset, length, false, relevance));
                }
            }
        }
    }
}
Also used : IMethod(org.eclipse.jdt.core.IMethod) StyledString(org.eclipse.jface.viewers.StyledString) IField(org.eclipse.jdt.core.IField)

Example 25 with IField

use of org.eclipse.jdt.core.IField in project che by eclipse.

the class JavaElementLabelComposer method appendTypeLabel.

/**
	 * Appends the label for a type. Considers the T_* flags.
	 *
	 * @param type the element to render
	 * @param flags the rendering flags. Flags with names starting with 'T_' are considered.
	 */
public void appendTypeLabel(IType type, long flags) {
    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) {
        IPackageFragment pack = type.getPackageFragment();
        if (!pack.isDefaultPackage()) {
            appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
    }
    IJavaElement parent = type.getParent();
    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) {
        IType declaringType = type.getDeclaringType();
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
        int parentType = parent.getElementType();
        if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) {
            // anonymous or local
            appendElementLabel(parent, 0);
            fBuffer.append('.');
        }
    }
    String typeName;
    boolean isAnonymous = false;
    if (type.isLambda()) {
        //$NON-NLS-1$
        typeName = "() -> {...}";
        try {
            String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
            if (superInterfaceSignatures.length > 0) {
                typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]);
            }
        } catch (JavaModelException e) {
        //ignore
        }
    } else {
        typeName = getElementName(type);
        try {
            isAnonymous = type.isAnonymous();
        } catch (JavaModelException e1) {
            // should not happen, but let's play safe:
            isAnonymous = typeName.length() == 0;
        }
        if (isAnonymous) {
            try {
                if (parent instanceof IField && type.isEnum()) {
                    typeName = '{' + JavaElementLabels.ELLIPSIS_STRING + '}';
                } else {
                    String supertypeName;
                    String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
                    if (superInterfaceSignatures.length > 0) {
                        supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]);
                    } else {
                        supertypeName = getSimpleTypeName(type, type.getSuperclassTypeSignature());
                    }
                    typeName = Messages.format(JavaUIMessages.JavaElementLabels_anonym_type, supertypeName);
                }
            } catch (JavaModelException e) {
                //ignore
                typeName = JavaUIMessages.JavaElementLabels_anonym;
            }
        }
    }
    fBuffer.append(typeName);
    if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) {
        if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) {
            BindingKey key = new BindingKey(type.getKey());
            if (key.isParameterizedType()) {
                String[] typeArguments = key.getTypeArguments();
                appendTypeArgumentSignaturesLabel(type, typeArguments, flags);
            } else {
                String[] typeParameters = Signature.getTypeParameters(key.toSignature());
                appendTypeParameterSignaturesLabel(typeParameters, flags);
            }
        } else if (type.exists()) {
            try {
                appendTypeParametersLabels(type.getTypeParameters(), flags);
            } catch (JavaModelException e) {
            // ignore
            }
        }
    }
    // category
    if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) {
        try {
            appendCategoryLabel(type, flags);
        } catch (JavaModelException e) {
        // ignore
        }
    }
    // post qualification
    if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) {
        int offset = fBuffer.length();
        fBuffer.append(JavaElementLabels.CONCAT_STRING);
        IType declaringType = type.getDeclaringType();
        if (declaringType == null && type.isBinary() && isAnonymous) {
            // workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type
            String tqn = type.getTypeQualifiedName();
            int lastDollar = tqn.lastIndexOf('$');
            if (lastDollar != 1) {
                //$NON-NLS-1$
                String declaringTypeCF = tqn.substring(0, lastDollar) + ".class";
                declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType();
                try {
                    ISourceRange typeSourceRange = type.getSourceRange();
                    if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) {
                        IJavaElement realParent = declaringType.getTypeRoot().getElementAt(typeSourceRange.getOffset() - 1);
                        if (realParent != null) {
                            parent = realParent;
                        }
                    }
                } catch (JavaModelException e) {
                // ignore
                }
            }
        }
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            int parentType = parent.getElementType();
            if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) {
                // anonymous or local
                fBuffer.append('.');
                appendElementLabel(parent, 0);
            }
        } else {
            appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS);
        }
        if (getFlag(flags, JavaElementLabels.COLORIZE)) {
            fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
        }
    }
}
Also used : IJavaElement(org.eclipse.jdt.core.IJavaElement) IPackageFragment(org.eclipse.jdt.core.IPackageFragment) JavaModelException(org.eclipse.jdt.core.JavaModelException) BindingKey(org.eclipse.jdt.core.BindingKey) StyledString(org.eclipse.jface.viewers.StyledString) IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType) ISourceRange(org.eclipse.jdt.core.ISourceRange)

Aggregations

IField (org.eclipse.jdt.core.IField)47 IType (org.eclipse.jdt.core.IType)30 IMethod (org.eclipse.jdt.core.IMethod)15 RefactoringStatus (org.eclipse.ltk.core.refactoring.RefactoringStatus)15 ICompilationUnit (org.eclipse.jdt.core.ICompilationUnit)14 IJavaElement (org.eclipse.jdt.core.IJavaElement)14 ArrayList (java.util.ArrayList)13 RenameJavaElementDescriptor (org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor)9 IPackageFragment (org.eclipse.jdt.core.IPackageFragment)6 Test (org.junit.Test)6 List (java.util.List)5 ILocalVariable (org.eclipse.jdt.core.ILocalVariable)5 JavaModelException (org.eclipse.jdt.core.JavaModelException)5 RenameArguments (org.eclipse.ltk.core.refactoring.participants.RenameArguments)5 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)4 IJavaProject (org.eclipse.jdt.core.IJavaProject)4 IMember (org.eclipse.jdt.core.IMember)4 ISourceRange (org.eclipse.jdt.core.ISourceRange)4 CompilationUnit (org.eclipse.jdt.core.dom.CompilationUnit)4 Field (org.eclipse.che.ide.ext.java.shared.dto.model.Field)3