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;
}
use of org.eclipse.jdt.core.IField in project che by eclipse.
the class MemberVisibilityAdjustor method adjustOutgoingVisibility.
/**
* Adjusts the visibility of the referenced body declaration.
*
* @param member the member where to adjust the visibility
* @param threshold the visibility keyword representing the required visibility, or <code>null</code> for default visibility
* @param template the message template to use
* @throws JavaModelException if an error occurs
*/
private void adjustOutgoingVisibility(final IMember member, final ModifierKeyword threshold, final String template) throws JavaModelException {
Assert.isTrue(!member.isBinary() && !member.isReadOnly());
boolean adjust = true;
final IType declaring = member.getDeclaringType();
if (declaring != null && (JavaModelUtil.isInterfaceOrAnnotation(declaring) || (member instanceof IField) && Flags.isEnum(member.getFlags()) || declaring.equals(fReferenced)))
adjust = false;
if (adjust && hasLowerVisibility(member.getFlags(), keywordToVisibility(threshold)) && needsVisibilityAdjustment(member, threshold))
fAdjustments.put(member, new OutgoingMemberVisibilityAdjustment(member, threshold, RefactoringStatus.createStatus(fVisibilitySeverity, Messages.format(template, new String[] { JavaElementLabels.getTextLabel(member, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.ALL_FULLY_QUALIFIED), getLabel(threshold) }), JavaStatusContext.create(member), null, RefactoringStatusEntry.NO_CODE, null)));
}
use of org.eclipse.jdt.core.IField in project che by eclipse.
the class RenameLinkedModeRefactoringSession method createRenameDescriptor.
/**
* Creates a rename descriptor.
*
* @param javaElement element to rename
* @param newName new name
* @return a rename descriptor with current settings as used in the refactoring dialogs
* @throws JavaModelException if an error occurs while accessing the element
*/
private RenameJavaElementDescriptor createRenameDescriptor(IJavaElement javaElement, String newName) throws JavaModelException {
String contributionId;
// see RefactoringExecutionStarter#createRenameSupport(..):
int elementType = javaElement.getElementType();
switch(elementType) {
case IJavaElement.JAVA_PROJECT:
contributionId = IJavaRefactorings.RENAME_JAVA_PROJECT;
break;
case IJavaElement.PACKAGE_FRAGMENT_ROOT:
contributionId = IJavaRefactorings.RENAME_SOURCE_FOLDER;
break;
case IJavaElement.PACKAGE_FRAGMENT:
contributionId = IJavaRefactorings.RENAME_PACKAGE;
break;
case IJavaElement.COMPILATION_UNIT:
contributionId = IJavaRefactorings.RENAME_COMPILATION_UNIT;
break;
case IJavaElement.TYPE:
contributionId = IJavaRefactorings.RENAME_TYPE;
break;
case IJavaElement.METHOD:
final IMethod method = (IMethod) javaElement;
if (method.isConstructor())
return createRenameDescriptor(method.getDeclaringType(), newName);
else
contributionId = IJavaRefactorings.RENAME_METHOD;
break;
case IJavaElement.FIELD:
IField field = (IField) javaElement;
if (field.isEnumConstant())
contributionId = IJavaRefactorings.RENAME_ENUM_CONSTANT;
else
contributionId = IJavaRefactorings.RENAME_FIELD;
break;
case IJavaElement.TYPE_PARAMETER:
contributionId = IJavaRefactorings.RENAME_TYPE_PARAMETER;
break;
case IJavaElement.LOCAL_VARIABLE:
contributionId = IJavaRefactorings.RENAME_LOCAL_VARIABLE;
break;
default:
return null;
}
RenameJavaElementDescriptor descriptor = (RenameJavaElementDescriptor) RefactoringCore.getRefactoringContribution(contributionId).createDescriptor();
descriptor.setJavaElement(javaElement);
descriptor.setNewName(newName);
if (elementType != IJavaElement.PACKAGE_FRAGMENT_ROOT)
descriptor.setUpdateReferences(true);
switch(elementType) {
case IJavaElement.METHOD:
case IJavaElement.FIELD:
descriptor.setDeprecateDelegate(/*refactoringSettings.getBoolean(DelegateUIHelper.DELEGATE_DEPRECATION)*/
false);
descriptor.setKeepOriginal(/*refactoringSettings.getBoolean(DelegateUIHelper.DELEGATE_UPDATING)*/
false);
}
switch(elementType) {
case IJavaElement.TYPE:
// case IJavaElement.COMPILATION_UNIT: // TODO
descriptor.setUpdateSimilarDeclarations(/*refactoringSettings.getBoolean(RenameRefactoringWizard.TYPE_UPDATE_SIMILAR_ELEMENTS)*/
false);
int strategy;
try {
//refactoringSettings.getInt(RenameRefactoringWizard.TYPE_SIMILAR_MATCH_STRATEGY);
strategy = 1;
} catch (NumberFormatException e) {
strategy = RenamingNameSuggestor.STRATEGY_EXACT;
}
descriptor.setMatchStrategy(strategy);
}
switch(elementType) {
case IJavaElement.PACKAGE_FRAGMENT:
descriptor.setUpdateHierarchy(/*refactoringSettings.getBoolean(RenameRefactoringWizard.PACKAGE_RENAME_SUBPACKAGES)*/
true);
}
switch(elementType) {
case IJavaElement.PACKAGE_FRAGMENT:
case IJavaElement.TYPE:
String fileNamePatterns = /*refactoringSettings.get(RenameRefactoringWizard.QUALIFIED_NAMES_PATTERNS)*/
"*";
if (fileNamePatterns != null && fileNamePatterns.length() != 0) {
descriptor.setFileNamePatterns(fileNamePatterns);
boolean updateQualifiedNames = /*refactoringSettings.getBoolean(RenameRefactoringWizard.UPDATE_QUALIFIED_NAMES)*/
false;
descriptor.setUpdateQualifiedNames(updateQualifiedNames);
// fShowPreview|= updateQualifiedNames;
}
}
switch(elementType) {
case IJavaElement.PACKAGE_FRAGMENT:
case IJavaElement.TYPE:
case IJavaElement.FIELD:
//refactoringSettings.getBoolean(RenameRefactoringWizard.UPDATE_TEXTUAL_MATCHES);
boolean updateTextualOccurrences = false;
descriptor.setUpdateTextualOccurrences(updateTextualOccurrences);
}
switch(elementType) {
case IJavaElement.FIELD:
descriptor.setRenameGetters(/*refactoringSettings.getBoolean(RenameRefactoringWizard.FIELD_RENAME_GETTER)*/
false);
descriptor.setRenameSetters(/*refactoringSettings.getBoolean(RenameRefactoringWizard.FIELD_RENAME_SETTER)*/
false);
}
return descriptor;
}
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;
}
Aggregations