Search in sources :

Example 51 with IField

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

the class SourcesFromBytecodeGenerator method generateType.

private void generateType(IType type, StringBuilder builder, String indent) throws JavaModelException {
    int flags = 0;
    appendAnnotationLabels(type.getAnnotations(), flags, builder, indent.substring(TAB.length()));
    builder.append(indent.substring(TAB.length()));
    builder.append(getModifiers(type.getFlags(), type.getFlags())).append(' ').append(getJavaType(type)).append(' ').append(type.getElementName());
    if (type.isResolved()) {
        BindingKey key = new BindingKey(type.getKey());
        if (key.isParameterizedType()) {
            String[] typeArguments = key.getTypeArguments();
            appendTypeArgumentSignaturesLabel(type, typeArguments, flags, builder);
        } else {
            String[] typeParameters = Signature.getTypeParameters(key.toSignature());
            appendTypeParameterSignaturesLabel(typeParameters, builder);
        }
    } else {
        appendTypeParametersLabels(type.getTypeParameters(), flags, builder);
    }
    if (!"java.lang.Object".equals(type.getSuperclassName()) && !"java.lang.Enum".equals(type.getSuperclassName())) {
        builder.append(" extends ");
        if (type.getSuperclassTypeSignature() != null) {
            //                appendTypeSignatureLabel(type, type.getSuperclassTypeSignature(), flags, builder);
            builder.append(Signature.toString(type.getSuperclassTypeSignature()));
        } else {
            builder.append(type.getSuperclassName());
        }
    }
    if (!type.isAnnotation()) {
        if (type.getSuperInterfaceNames().length != 0) {
            builder.append(" implements ");
            String[] signatures = type.getSuperInterfaceTypeSignatures();
            if (signatures.length == 0) {
                signatures = type.getSuperInterfaceNames();
            }
            for (String interfaceFqn : signatures) {
                builder.append(Signature.toString(interfaceFqn)).append(", ");
            }
            builder.delete(builder.length() - 2, builder.length());
        }
    }
    builder.append(" {\n");
    List<IField> fields = new ArrayList<>();
    if (type.isEnum()) {
        builder.append(indent);
        for (IField field : type.getFields()) {
            if (field.isEnumConstant()) {
                builder.append(field.getElementName()).append(", ");
            } else {
                fields.add(field);
            }
        }
        if (", ".equals(builder.substring(builder.length() - 2))) {
            builder.delete(builder.length() - 2, builder.length());
        }
        builder.append(";\n");
    } else {
        fields.addAll(Arrays.asList(type.getFields()));
    }
    for (IField field : fields) {
        if (Flags.isSynthetic(field.getFlags())) {
            continue;
        }
        appendAnnotationLabels(field.getAnnotations(), flags, builder, indent);
        builder.append(indent).append(getModifiers(field.getFlags(), type.getFlags()));
        if (builder.charAt(builder.length() - 1) != ' ') {
            builder.append(' ');
        }
        builder.append(Signature.toCharArray(field.getTypeSignature().toCharArray())).append(' ').append(field.getElementName());
        if (field.getConstant() != null) {
            builder.append(" = ");
            if (field.getConstant() instanceof String) {
                builder.append('"').append(field.getConstant()).append('"');
            } else {
                builder.append(field.getConstant());
            }
        }
        builder.append(";\n");
    }
    builder.append('\n');
    for (IMethod method : type.getMethods()) {
        if (method.getElementName().equals("<clinit>") || Flags.isSynthetic(method.getFlags())) {
            continue;
        }
        appendAnnotationLabels(method.getAnnotations(), flags, builder, indent);
        BindingKey resolvedKey = method.isResolved() ? new BindingKey(method.getKey()) : null;
        String resolvedSig = (resolvedKey != null) ? resolvedKey.toSignature() : null;
        builder.append(indent).append(getModifiers(method.getFlags(), type.getFlags()));
        if (builder.charAt(builder.length() - 1) != ' ') {
            builder.append(' ');
        }
        if (resolvedKey != null) {
            if (resolvedKey.isParameterizedMethod()) {
                String[] typeArgRefs = resolvedKey.getTypeArguments();
                if (typeArgRefs.length > 0) {
                    appendTypeArgumentSignaturesLabel(method, typeArgRefs, flags, builder);
                    builder.append(' ');
                }
            } else {
                String[] typeParameterSigs = Signature.getTypeParameters(resolvedSig);
                if (typeParameterSigs.length > 0) {
                    appendTypeParameterSignaturesLabel(typeParameterSigs, builder);
                    builder.append(' ');
                }
            }
        } else if (method.exists()) {
            ITypeParameter[] typeParameters = method.getTypeParameters();
            if (typeParameters.length > 0) {
                appendTypeParametersLabels(typeParameters, flags, builder);
                builder.append(' ');
            }
        }
        if (!method.isConstructor()) {
            String returnTypeSig = resolvedSig != null ? Signature.getReturnType(resolvedSig) : method.getReturnType();
            appendTypeSignatureLabel(method, returnTypeSig, 0, builder);
            builder.append(' ');
        //                builder.append(Signature.toCharArray(method.getReturnType().toCharArray())).append(' ');
        }
        builder.append(method.getElementName());
        builder.append('(');
        for (ILocalVariable variable : method.getParameters()) {
            builder.append(Signature.toString(variable.getTypeSignature()));
            builder.append(' ').append(variable.getElementName()).append(", ");
        }
        if (builder.charAt(builder.length() - 1) == ' ') {
            builder.delete(builder.length() - 2, builder.length());
        }
        builder.append(')');
        String[] exceptionTypes = method.getExceptionTypes();
        if (exceptionTypes != null && exceptionTypes.length != 0) {
            builder.append(' ').append("throws ");
            for (String exceptionType : exceptionTypes) {
                builder.append(Signature.toCharArray(exceptionType.toCharArray())).append(", ");
            }
            builder.delete(builder.length() - 2, builder.length());
        }
        if (type.isInterface() || type.isAnnotation()) {
            builder.append(";\n\n");
        } else {
            builder.append(" {").append(METHOD_BODY).append("}\n\n");
        }
    }
    for (IType iType : type.getTypes()) {
        generateType(iType, builder, indent + indent);
    }
    builder.append(indent.substring(TAB.length()));
    builder.append("}\n");
}
Also used : ILocalVariable(org.eclipse.jdt.core.ILocalVariable) BindingKey(org.eclipse.jdt.core.BindingKey) ArrayList(java.util.ArrayList) IMethod(org.eclipse.jdt.core.IMethod) IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType)

Example 52 with IField

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

the class JavaNavigation method convertToDTOType.

private Type convertToDTOType(IType iType) throws JavaModelException {
    List<Type> types = new ArrayList<>();
    List<Method> methods = new ArrayList<>();
    List<Field> fields = new ArrayList<>();
    List<Initializer> initializers = new ArrayList<>();
    Type type = DtoFactory.newDto(Type.class);
    setRootPath(iType, type);
    type.setElementName(iType.getElementName());
    type.setLabel(org.eclipse.jdt.ui.JavaElementLabels.getElementLabel(iType, org.eclipse.jdt.ui.JavaElementLabels.ALL_DEFAULT));
    type.setHandleIdentifier(iType.getHandleIdentifier());
    type.setFlags(iType.getFlags());
    type.setFileRegion(convertToDTORegion(iType.getNameRange()));
    if (!iType.hasChildren()) {
        type.setTypes(types);
        return type;
    }
    IJavaElement[] children = iType.getChildren();
    for (IJavaElement child : children) {
        switch(child.getElementType()) {
            case //type
            7:
                types.add(convertToDTOType((IType) child));
                break;
            case //field
            8:
                fields.add(convertToDTOField((IField) child));
                break;
            case //method
            9:
                methods.add(convertToDTOMethod((IMethod) child));
                break;
            case //initializer
            10:
                initializers.add(convertToDTOInitializer((IInitializer) child));
                break;
            default:
                break;
        }
    }
    type.setFields(fields);
    type.setMethods(methods);
    type.setInitializers(initializers);
    type.setTypes(types);
    return type;
}
Also used : IJavaElement(org.eclipse.jdt.core.IJavaElement) IInitializer(org.eclipse.jdt.core.IInitializer) ArrayList(java.util.ArrayList) Method(org.eclipse.che.ide.ext.java.shared.dto.model.Method) IMethod(org.eclipse.jdt.core.IMethod) IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType) Field(org.eclipse.che.ide.ext.java.shared.dto.model.Field) IField(org.eclipse.jdt.core.IField) JarEntryType(org.eclipse.che.ide.ext.java.shared.JarEntry.JarEntryType) IType(org.eclipse.jdt.core.IType) Type(org.eclipse.che.ide.ext.java.shared.dto.model.Type) Initializer(org.eclipse.che.ide.ext.java.shared.dto.model.Initializer) IInitializer(org.eclipse.jdt.core.IInitializer) IMethod(org.eclipse.jdt.core.IMethod)

Example 53 with IField

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

the class JavadocTest method binaryFieldDoc.

@Test
public void binaryFieldDoc() throws JavaModelException, URISyntaxException {
    IType type = project.findType("java.util.ArrayList");
    assertThat(type).isNotNull();
    IField field = type.getField("size");
    assertThat(field).isNotNull();
    String htmlContent = JavadocContentAccess2.getHTMLContent(field, true, urlPart);
    assertThat(htmlContent).isNotNull().isNotEmpty().contains("The size of the ArrayList (the number of elements it contains).");
}
Also used : IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType) Test(org.junit.Test)

Example 54 with IField

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

the class SourceMapper method enterField.

/**
     * @see org.eclipse.jdt.internal.compiler.ISourceElementRequestor
     */
public void enterField(FieldInfo fieldInfo) {
    if (this.typeDepth >= 0) {
        this.memberDeclarationStart[this.typeDepth] = fieldInfo.declarationStart;
        this.memberNameRange[this.typeDepth] = new SourceRange(fieldInfo.nameSourceStart, fieldInfo.nameSourceEnd - fieldInfo.nameSourceStart + 1);
        String fieldName = new String(fieldInfo.name);
        this.memberName[this.typeDepth] = fieldName;
        // categories
        IType currentType = this.types[this.typeDepth];
        IField field = currentType.getField(fieldName);
        addCategories(field, fieldInfo.categories);
    }
}
Also used : ISourceRange(org.eclipse.jdt.core.ISourceRange) SourceRange(org.eclipse.jdt.core.SourceRange) IField(org.eclipse.jdt.core.IField) IType(org.eclipse.jdt.core.IType)

Example 55 with IField

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

the class JavaElementLinks method parseURI.

public static IJavaElement parseURI(String ssp, JavaProject project) {
    //        String ssp= uri.getSchemeSpecificPart();
    String[] segments = ssp.split(String.valueOf(LINK_SEPARATOR));
    // replace '[' manually, since URI confuses it for an IPv6 address as per RFC 2732:
    IJavaElement element = JavaCore.create(segments[1].replace(LINK_BRACKET_REPLACEMENT, '['));
    if (segments.length > 2) {
        String refTypeName = segments[2];
        if (refTypeName.indexOf('.') == -1) {
            try {
                ITypeParameter resolvedTypeVariable = resolveTypeVariable(element, refTypeName);
                if (resolvedTypeVariable != null)
                    return resolvedTypeVariable;
            } catch (JavaModelException e) {
                LOG.error(e.getMessage(), e);
            }
        }
        if (element instanceof IAnnotation) {
            element = element.getParent();
        }
        if (element instanceof ILocalVariable) {
            element = ((ILocalVariable) element).getDeclaringMember();
        } else if (element instanceof ITypeParameter) {
            element = ((ITypeParameter) element).getDeclaringMember();
        }
        if (element instanceof IMember && !(element instanceof IType)) {
            element = ((IMember) element).getDeclaringType();
        }
        if (element instanceof IPackageFragment) {
            try {
                IPackageFragment root = (IPackageFragment) element;
                element = resolvePackageInfoType(root, refTypeName);
                if (element == null) {
                    // find it as package
                    IJavaProject javaProject = root.getJavaProject();
                    return JavaModelUtil.findTypeContainer(javaProject, refTypeName);
                }
            } catch (JavaModelException e) {
                LOG.error(e.getMessage(), e);
            }
        }
        if (element instanceof IType) {
            try {
                IType type = (IType) element;
                if (refTypeName.length() > 0) {
                    type = resolveType(type, refTypeName);
                    if (type == null) {
                        IPackageFragment pack = JavaModelUtil.getPackageFragmentRoot(element).getPackageFragment(refTypeName);
                        if (pack.exists())
                            return pack;
                    }
                }
                if (type != null) {
                    element = type;
                    if (segments.length > 3) {
                        String refMemberName = segments[3];
                        if (segments.length > 4) {
                            String[] paramSignatures = new String[segments[4].length() == 0 ? 0 : segments.length - 4];
                            for (int i = 0; i < paramSignatures.length; i++) {
                                paramSignatures[i] = Signature.createTypeSignature(segments[i + 4], false);
                            }
                            IMethod method = type.getMethod(refMemberName, paramSignatures);
                            IMethod[] methods = type.findMethods(method);
                            if (methods != null) {
                                return methods[0];
                            } else {
                                //TODO: methods whose signature contains type parameters can not be found
                                // easily, since the Javadoc references are erasures
                                //Shortcut: only check name and parameter count:
                                methods = type.getMethods();
                                for (int i = 0; i < methods.length; i++) {
                                    method = methods[i];
                                    if (method.getElementName().equals(refMemberName) && method.getNumberOfParameters() == paramSignatures.length)
                                        return method;
                                }
                            //                                    // reference can also point to method from supertype:
                            //                                    ITypeHierarchy hierarchy= SuperTypeHierarchyCache.getTypeHierarchy(type);
                            //                                    method= JavaModelUtil.findMethodInHierarchy(hierarchy, type, refMemberName, paramSignatures, false);
                            //                                    if (method != null)
                            //                                        return method;
                            }
                        } else {
                            IField field = type.getField(refMemberName);
                            if (field.exists()) {
                                return field;
                            } else {
                                IMethod[] methods = type.getMethods();
                                for (int i = 0; i < methods.length; i++) {
                                    IMethod method = methods[i];
                                    if (method.getElementName().equals(refMemberName))
                                        return method;
                                }
                            }
                        }
                    }
                } else {
                // FIXME: either remove or show dialog
                //						JavaPlugin.logErrorMessage("JavaElementLinks could not resolve " + uri); //$NON-NLS-1$
                }
                return type;
            } catch (JavaModelException e) {
                LOG.error(e.getMessage(), e);
            }
        }
    }
    return element;
}
Also used : IAnnotation(org.eclipse.jdt.core.IAnnotation) IJavaElement(org.eclipse.jdt.core.IJavaElement) JavaModelException(org.eclipse.jdt.core.JavaModelException) IPackageFragment(org.eclipse.jdt.core.IPackageFragment) ITypeParameter(org.eclipse.jdt.core.ITypeParameter) IField(org.eclipse.jdt.core.IField) IMember(org.eclipse.jdt.core.IMember) IType(org.eclipse.jdt.core.IType) ILocalVariable(org.eclipse.jdt.core.ILocalVariable) IJavaProject(org.eclipse.jdt.core.IJavaProject) IMethod(org.eclipse.jdt.core.IMethod)

Aggregations

IField (org.eclipse.jdt.core.IField)58 IType (org.eclipse.jdt.core.IType)36 IMethod (org.eclipse.jdt.core.IMethod)21 ArrayList (java.util.ArrayList)18 IJavaElement (org.eclipse.jdt.core.IJavaElement)16 Test (org.junit.Test)16 RefactoringStatus (org.eclipse.ltk.core.refactoring.RefactoringStatus)15 ICompilationUnit (org.eclipse.jdt.core.ICompilationUnit)14 RenameJavaElementDescriptor (org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor)9 StringConcatenation (org.eclipse.xtend2.lib.StringConcatenation)7 Function1 (org.eclipse.xtext.xbase.lib.Functions.Function1)7 IPackageFragment (org.eclipse.jdt.core.IPackageFragment)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 IFile (org.eclipse.core.resources.IFile)4 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)4 IJavaProject (org.eclipse.jdt.core.IJavaProject)4 IMember (org.eclipse.jdt.core.IMember)4