List of usage examples for org.eclipse.jdt.core IMethod getParameterTypes
String[] getParameterTypes();
From source file:at.bestsolution.efxclipse.tooling.model.internal.FXClass.java
License:Open Source License
@Override public IMethod getValueOf() { // if( ! valueOfResolved ) { try {/* www .j a v a 2s. c om*/ for (IMethod m : type.getMethods()) { if (Flags.isStatic(m.getFlags()) && Flags.isPublic(m.getFlags()) && "valueOf".equals(m.getElementName())) { if (m.getParameterTypes().length == 1) { // String fqnType = Util.toFQN((IType) m.getParent(),m.getParameterTypes()[0]); // if("java.lang.String".equals( fqnType) ) { valueOfMethod = m; break; // } } } } valueOfResolved = true; } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } // } return valueOfMethod; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.FXCollectionProperty.java
License:Open Source License
@Override public IType getElementType() { if (elementType == null) { try {//from w ww. j av a 2 s .c om IMethod m = (IMethod) getJavaElement(); String signature; if (isSetable()) { signature = m.getParameterTypes()[0]; } else { signature = m.getReturnType(); } //TODO if the value is a generic parameter we need to resolve it //using the class' generic parameter String genericType = Signature.toString(signature); String eType; if (genericType.contains("extends")) { eType = genericType.substring(genericType.indexOf("extends") + "extends".length(), genericType.indexOf('>')); } else if (genericType.contains("super")) { eType = genericType.substring(genericType.indexOf("super") + "super".length(), genericType.indexOf('>')); } else { eType = genericType.substring(genericType.indexOf('<') + 1, genericType.lastIndexOf('>')); eType = Signature.getTypeErasure(eType); } eType = eType.trim(); IType t = (IType) m.getParent(); String fqnType = Util.getFQNType(t, eType); if (fqnType == null) { return null; } elementType = getFXClass().getJavaProject().findType(fqnType); } catch (JavaModelException e) { // TODO Auto-generated method stub e.printStackTrace(); } } return elementType; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.FXCtrlClass.java
License:Open Source License
private Map<String, IFXCtrlEventMethod> getLocalEventMethods() { if (eventMethods == null) { eventMethods = new HashMap<String, IFXCtrlEventMethod>(); try {/*ww w .j av a 2s .c o m*/ for (IMethod m : type.getMethods()) { boolean annotated = false; for (IAnnotation a : m.getAnnotations()) { if (a.getElementName().endsWith("FXML")) { annotated = true; break; } } if (annotated) { String[] types = m.getParameterTypes(); if (types.length <= 1) { if (types.length == 1) { String erasedFQNType = Util.getFQNType((IType) m.getParent(), Signature.getTypeErasure(Signature.toString(types[0]))); if (FXCtrlEventMethod.isEventMethod(javaProject, erasedFQNType)) { eventMethods.put(m.getElementName(), new FXCtrlEventMethod(this, m, erasedFQNType)); } } else { // Only if there's not already a method with the same id if (!eventMethods.containsKey(m.getElementName())) { eventMethods.put(m.getElementName(), new FXCtrlEventMethod(this, m, null)); } } } } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return eventMethods; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.FXEventHandlerProperty.java
License:Open Source License
public IType getEventType() { if (eventType == null) { try {// w w w. ja v a 2 s.c o m IMethod m = (IMethod) getJavaElement(); String signature; if (isSetable()) { signature = m.getParameterTypes()[0]; } else { signature = m.getReturnType(); } IType t = (IType) m.getParent(); String fqnType = Util.toFQN(t, signature); eventType = getFXClass().getJavaProject().findType(fqnType); } catch (JavaModelException e) { // TODO Auto-generated method stub e.printStackTrace(); } } return eventType; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.utils.PropertiesUtil.java
License:Open Source License
public static Map<String, IFXProperty> resolveProperties(FXClass fxClass) throws JavaModelException { Map<String, IFXProperty> rv = new HashMap<String, IFXProperty>(); if ("java.lang.Object".equals(fxClass.getFQN())) { return rv; }// ww w .j a va 2 s . c o m Map<String, IMethod> beanProperties = new HashMap<String, IMethod>(); Map<String, IMethod> builderProperties = new HashMap<String, IMethod>(); String builder = fxClass.getType().getFullyQualifiedName() + "Builder"; IType builderType = fxClass.getJavaProject().findType(builder); if (builderType != null) { for (IMethod m : builderType.getMethods()) { // Only public and none static methods if (!Flags.isPublic(m.getFlags()) || Flags.isStatic(m.getFlags())) { continue; } String name = m.getElementName(); // omit the build method if ("build".equals(name) || "applyTo".equals(name)) { continue; } if (m.getParameterNames().length == 1) { String param = m.getParameterTypes()[0]; if (Signature.getArrayCount(param) == 0) { builderProperties.put(name, m); } } } } for (IMethod m : fxClass.getType().getMethods()) { // Only public and none static methods if (!Flags.isPublic(m.getFlags()) || Flags.isStatic(m.getFlags())) { continue; } String name = m.getElementName(); // do not use impl methods they are private if (name.startsWith("getImpl") || name.startsWith("isImpl") || name.startsWith("setImpl") || name.contains("Unmodifiable")) { continue; } if (name.startsWith("get") || name.startsWith("is")) { name = name.startsWith("get") ? name.substring(3) : name.substring(2); name = Character.toLowerCase(name.charAt(0)) + name.substring(1); // Only set if there's not already one stored if (!beanProperties.containsKey(name)) { beanProperties.put(name, m); } } else if (m.getElementName().startsWith("set") && m.getParameters().length == 1) { name = name.substring(3); name = Character.toLowerCase(name.charAt(0)) + name.substring(1); beanProperties.put(name, m); } } for (Entry<String, IMethod> e : beanProperties.entrySet()) { FXProperty p = getProperty(fxClass, e.getKey(), e.getValue()); if (p != null) { rv.put(e.getKey(), p); } } for (Entry<String, IMethod> e : builderProperties.entrySet()) { IFXProperty p = rv.get(e.getKey()); if (p == null) { continue; } if (!(p instanceof IFXCollectionProperty)) { if (!p.isSetable()) { p = getProperty(fxClass, e.getKey(), e.getValue()); if (p != null) { rv.put(e.getKey(), p); } } } } return rv; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.utils.PropertiesUtil.java
License:Open Source License
private static FXProperty getProperty(FXClass fxClass, String name, IMethod m) throws JavaModelException { FXProperty p = null;//ww w .j a v a 2 s.c om String signature; if (m.getElementName().startsWith("get") || m.getElementName().startsWith("is")) { signature = m.getReturnType(); } else { // setter or builder method signature = m.getParameterTypes()[0]; } String genericType = Signature.toString(signature); if (FXPrimitiveProperty.isPrimitive(genericType)) { p = new FXPrimitiveProperty(fxClass, name, m, Type.parseType(genericType), false); } else { String erasedFQNType = Util.getFQNType((IType) m.getParent(), Signature.getTypeErasure(genericType)); if (erasedFQNType != null) { if (FXEventHandlerProperty.isEventHandler(fxClass.getJavaProject(), erasedFQNType)) { p = new FXEventHandlerProperty(fxClass, name, m, false); } else if (FXCollectionProperty.isList(fxClass.getJavaProject(), erasedFQNType)) { p = new FXCollectionProperty(fxClass, name, m, erasedFQNType, genericType, false); } else if (FXMapProperty.isMap(fxClass.getJavaProject(), erasedFQNType)) { p = new FXMapProperty(fxClass, name, m, false); } else if (FXEnumProperty.isEnum(fxClass.getJavaProject(), erasedFQNType)) { p = new FXEnumProperty(fxClass, name, m, erasedFQNType, false); } else { p = new FXObjectPoperty(fxClass, name, m, erasedFQNType, false); } } } return p; }
From source file:at.bestsolution.efxclipse.tooling.model.internal.utils.PropertiesUtil.java
License:Open Source License
public static Map<String, IFXProperty> resolveStaticProperties(FXClass fxClass) throws JavaModelException { Map<String, IFXProperty> rv = new HashMap<String, IFXProperty>(); if ("java.lang.Object".equals(fxClass.getFQN())) { return rv; }//from w ww . j av a 2 s .co m for (IMethod m : fxClass.getType().getMethods()) { if (!Flags.isPublic(m.getFlags()) || !Flags.isStatic(m.getFlags())) { continue; } String name = m.getElementName(); if (name.startsWith("setImpl")) { continue; } if (name.startsWith("set") && m.getParameterTypes().length == 2) { name = name.substring(3); name = Character.toLowerCase(name.charAt(0)) + name.substring(1); FXProperty p = null; String signature = m.getParameterTypes()[1]; String genericType = Signature.toString(signature); if (FXPrimitiveProperty.isPrimitive(genericType)) { p = new FXPrimitiveProperty(fxClass, name, m, Type.parseType(genericType), true); } else { String erasedFQNType = Util.getFQNType((IType) m.getParent(), Signature.getTypeErasure(genericType)); if (erasedFQNType != null) { if (FXEnumProperty.isEnum(fxClass.getJavaProject(), erasedFQNType)) { p = new FXEnumProperty(fxClass, name, m, erasedFQNType, true); } else { p = new FXObjectPoperty(fxClass, name, m, erasedFQNType, true); } } } if (p != null) { rv.put(p.getName(), p); } } } return rv; }
From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java
License:Open Source License
private boolean hasCompatibleParameterTypes(IMethod overriding, IMethod overridden) throws JavaModelException { String[] overriddenParamTypes = overridden.getParameterTypes(); String[] overridingParamTypes = overriding.getParameterTypes(); String[] substitutedOverriding = new String[overridingParamTypes.length]; boolean testErasure = false; for (int i = 0; i < overridingParamTypes.length; i++) { String overriddenParamSig = overriddenParamTypes[i]; String overriddenParamName = getSubstitutedTypeName(overriddenParamSig, overridden); String overridingParamName = getSubstitutedTypeName(overridingParamTypes[i], overriding); substitutedOverriding[i] = overridingParamName; if (!overriddenParamName.equals(overridingParamName)) { testErasure = true;/*from ww w . j av a 2 s . co m*/ break; } } if (testErasure) { for (int i = 0; i < overridingParamTypes.length; i++) { String overriddenParamSig = overriddenParamTypes[i]; String overriddenParamName = getErasedTypeName(overriddenParamSig, overridden); String overridingParamName = substitutedOverriding[i]; if (overridingParamName == null) overridingParamName = getSubstitutedTypeName(overridingParamTypes[i], overriding); if (!overriddenParamName.equals(overridingParamName)) { return false; } } } return true; }
From source file:at.bestsolution.fxide.jdt.editor.internal.MethodUtil.java
License:Open Source License
/** * Tests if a method equals to the given signature. Parameter types are only * compared by the simple name, no resolving for the fully qualified type * name is done. Constructors are only compared by parameters, not the name. * * @param name Name of the method/*from w ww . j ava2s. com*/ * @param paramTypes The type signatures of the parameters e.g. * <code>{"QString;","I"}</code> * @param isConstructor Specifies if the method is a constructor * @param method the method to be compared with this info's method * @param typeVariables a map from type variables to types * @param type the given type that declares the method * @return Returns <code>true</code> if the method has the given name and * parameter types and constructor state. * @throws JavaModelException if the method does not exist or if an exception occurs while accessing its corresponding resource */ private boolean isSameMethodSignature(String name, String[] paramTypes, boolean isConstructor, IMethod method, Map<String, char[]> typeVariables, IType type) throws JavaModelException { if (isConstructor || name.equals(method.getElementName())) { if (isConstructor == method.isConstructor()) { String[] otherParams = method.getParameterTypes(); // types may be type variables boolean isBinaryConstructorForNonStaticMemberClass = method.isBinary() && type.isMember() && !Flags.isStatic(type.getFlags()); int syntheticParameterCorrection = isBinaryConstructorForNonStaticMemberClass && paramTypes.length == otherParams.length - 1 ? 1 : 0; if (paramTypes.length == otherParams.length - syntheticParameterCorrection) { fFallbackMatch = method; String signature = method.getSignature(); String[] otherParamsFromSignature = Signature.getParameterTypes(signature); // types are resolved / upper-bounded // no need to check method type variables since these are // not yet bound when proposing a method for (int i = 0; i < paramTypes.length; i++) { String ourParamName = computeSimpleTypeName(paramTypes[i], typeVariables); String otherParamName1 = computeSimpleTypeName( otherParams[i + syntheticParameterCorrection], typeVariables); String otherParamName2 = computeSimpleTypeName( otherParamsFromSignature[i + syntheticParameterCorrection], typeVariables); if (!ourParamName.equals(otherParamName1) && !ourParamName.equals(otherParamName2)) { return false; } } return true; } } } return false; }
From source file:at.bestsolution.fxide.jdt.text.viewersupport.JavaElementLabelComposer.java
License:Open Source License
/** * Appends the label for a method. Considers the M_* flags. * * @param method the element to render//from www .j a v a 2s . co m * @param flags the rendering flags. Flags with names starting with 'M_' are considered. */ public void appendMethodLabel(IMethod method, long flags) { try { BindingKey resolvedKey = getFlag(flags, JavaElementLabels.USE_RESOLVED) && method.isResolved() ? new BindingKey(method.getKey()) : null; String resolvedSig = (resolvedKey != null) ? resolvedKey.toSignature() : null; // type parameters if (getFlag(flags, JavaElementLabels.M_PRE_TYPE_PARAMETERS)) { if (resolvedKey != null) { if (resolvedKey.isParameterizedMethod()) { String[] typeArgRefs = resolvedKey.getTypeArguments(); if (typeArgRefs.length > 0) { appendTypeArgumentSignaturesLabel(method, typeArgRefs, flags); fBuffer.append(' '); } } else { String[] typeParameterSigs = Signature.getTypeParameters(resolvedSig); if (typeParameterSigs.length > 0) { appendTypeParameterSignaturesLabel(typeParameterSigs, flags); fBuffer.append(' '); } } } else if (method.exists()) { ITypeParameter[] typeParameters = method.getTypeParameters(); if (typeParameters.length > 0) { appendTypeParametersLabels(typeParameters, flags); fBuffer.append(' '); } } } // return type if (getFlag(flags, JavaElementLabels.M_PRE_RETURNTYPE) && method.exists() && !method.isConstructor()) { String returnTypeSig = resolvedSig != null ? Signature.getReturnType(resolvedSig) : method.getReturnType(); appendTypeSignatureLabel(method, returnTypeSig, flags); fBuffer.append(' '); } // qualification if (getFlag(flags, JavaElementLabels.M_FULLY_QUALIFIED)) { appendTypeLabel(method.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS)); fBuffer.append('.'); } fBuffer.append(getElementName(method)); // constructor type arguments if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS) && method.exists() && method.isConstructor()) { if (resolvedSig != null && resolvedKey.isParameterizedType()) { BindingKey declaringType = resolvedKey.getDeclaringType(); if (declaringType != null) { String[] declaringTypeArguments = declaringType.getTypeArguments(); appendTypeArgumentSignaturesLabel(method, declaringTypeArguments, flags); } } } // parameters fBuffer.append('('); String[] declaredParameterTypes = method.getParameterTypes(); if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES)) { String[] types = null; int nParams = 0; boolean renderVarargs = false; boolean isPolymorphic = false; if (getFlag(flags, JavaElementLabels.M_PARAMETER_TYPES)) { if (resolvedSig != null) { types = Signature.getParameterTypes(resolvedSig); } else { types = declaredParameterTypes; } nParams = types.length; renderVarargs = method.exists() && Flags.isVarargs(method.getFlags()); if (renderVarargs && resolvedSig != null && declaredParameterTypes.length == 1 && JavaModelUtil.isPolymorphicSignature(method)) { renderVarargs = false; isPolymorphic = true; } } String[] names = null; if (getFlag(flags, JavaElementLabels.M_PARAMETER_NAMES) && method.exists()) { names = method.getParameterNames(); if (isPolymorphic) { // handled specially below } else if (types == null) { nParams = names.length; } else { // types != null if (nParams != names.length) { if (resolvedSig != null && types.length > names.length) { // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=99137 nParams = names.length; String[] typesWithoutSyntheticParams = new String[nParams]; System.arraycopy(types, types.length - nParams, typesWithoutSyntheticParams, 0, nParams); types = typesWithoutSyntheticParams; } else { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=101029 // JavaPlugin.logErrorMessage("JavaElementLabels: Number of param types(" + nParams + ") != number of names(" + names.length + "): " + method.getElementName()); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ names = null; // no names rendered } } } } ILocalVariable[] annotatedParameters = null; if (nParams > 0 && getFlag(flags, JavaElementLabels.M_PARAMETER_ANNOTATIONS)) { annotatedParameters = method.getParameters(); } for (int i = 0; i < nParams; i++) { if (i > 0) { fBuffer.append(JavaElementLabels.COMMA_STRING); } if (annotatedParameters != null && i < annotatedParameters.length) { appendAnnotationLabels(annotatedParameters[i].getAnnotations(), flags); } if (types != null) { String paramSig = types[i]; if (renderVarargs && (i == nParams - 1)) { int newDim = Signature.getArrayCount(paramSig) - 1; appendTypeSignatureLabel(method, Signature.getElementType(paramSig), flags); for (int k = 0; k < newDim; k++) { fBuffer.append('[').append(']'); } fBuffer.append(JavaElementLabels.ELLIPSIS_STRING); } else { appendTypeSignatureLabel(method, paramSig, flags); } } if (names != null) { if (types != null) { fBuffer.append(' '); } if (isPolymorphic) { fBuffer.append(names[0] + i); } else { fBuffer.append(names[i]); } } } } else { if (declaredParameterTypes.length > 0) { fBuffer.append(JavaElementLabels.ELLIPSIS_STRING); } } fBuffer.append(')'); if (getFlag(flags, JavaElementLabels.M_EXCEPTIONS)) { String[] types; if (resolvedKey != null) { types = resolvedKey.getThrownExceptions(); } else { types = method.exists() ? method.getExceptionTypes() : new String[0]; } if (types.length > 0) { fBuffer.append(" throws "); //$NON-NLS-1$ for (int i = 0; i < types.length; i++) { if (i > 0) { fBuffer.append(JavaElementLabels.COMMA_STRING); } appendTypeSignatureLabel(method, types[i], flags); } } } if (getFlag(flags, JavaElementLabels.M_APP_TYPE_PARAMETERS)) { int offset = fBuffer.length(); if (resolvedKey != null) { if (resolvedKey.isParameterizedMethod()) { String[] typeArgRefs = resolvedKey.getTypeArguments(); if (typeArgRefs.length > 0) { fBuffer.append(' '); appendTypeArgumentSignaturesLabel(method, typeArgRefs, flags); } } else { String[] typeParameterSigs = Signature.getTypeParameters(resolvedSig); if (typeParameterSigs.length > 0) { fBuffer.append(' '); appendTypeParameterSignaturesLabel(typeParameterSigs, flags); } } } else if (method.exists()) { ITypeParameter[] typeParameters = method.getTypeParameters(); if (typeParameters.length > 0) { fBuffer.append(' '); appendTypeParametersLabels(typeParameters, flags); } } // if (getFlag(flags, JavaElementLabels.COLORIZE) && offset != fBuffer.length()) { // fBuffer.setStyle(offset, fBuffer.length() - offset, DECORATIONS_STYLE); // } } if (getFlag(flags, JavaElementLabels.M_APP_RETURNTYPE) && method.exists() && !method.isConstructor()) { int offset = fBuffer.length(); fBuffer.append(JavaElementLabels.DECL_STRING); String returnTypeSig = resolvedSig != null ? Signature.getReturnType(resolvedSig) : method.getReturnType(); appendTypeSignatureLabel(method, returnTypeSig, flags); // if (getFlag(flags, JavaElementLabels.COLORIZE)) { // fBuffer.setStyle(offset, fBuffer.length() - offset, DECORATIONS_STYLE); // } } // category if (getFlag(flags, JavaElementLabels.M_CATEGORY) && method.exists()) appendCategoryLabel(method, flags); // post qualification if (getFlag(flags, JavaElementLabels.M_POST_QUALIFIED)) { int offset = fBuffer.length(); fBuffer.append(JavaElementLabels.CONCAT_STRING); appendTypeLabel(method.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS)); // if (getFlag(flags, JavaElementLabels.COLORIZE)) { // fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE); // } } } catch (JavaModelException e) { //TODO e.printStackTrace(); } }