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");
}
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;
}
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).");
}
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);
}
}
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;
}
Aggregations