List of usage examples for org.eclipse.jdt.core IType getMethods
IMethod[] getMethods() throws JavaModelException;
From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.util.JDTHelper.java
License:Open Source License
public TypeData getTypeData(IJavaProject jproject, IType jdtType) { if (jdtType == null) { return null; }/*from w w w . j a va 2 s . c o m*/ TypeData data = typeCache.get(jdtType.getFullyQualifiedName()); if (data == null) { try { List<IMethod> allMethods = new ArrayList<IMethod>(); allMethods.addAll(Arrays.asList(jdtType.getMethods())); IType parentType = jdtType; while (parentType != null && parentType.getSuperclassName() != null) { if (parentType instanceof SourceType) { String[][] typeDefs = parentType.resolveType(parentType.getSuperclassName()); if (typeDefs != null) { for (String[] type : typeDefs) { parentType = jproject.findType(type[0] + "." + type[1]); } } } else { parentType = jproject.findType(parentType.getSuperclassName()); } if (parentType != null) { allMethods.addAll(Arrays.asList(parentType.getMethods())); } } data = createData(allMethods, jproject); if (!(jdtType instanceof SourceType)) { typeCache.put(jdtType.getFullyQualifiedName(), data); } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return data; }
From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.util.JDTHelper.java
License:Open Source License
private List<Proposal> getProposals(IType type, IJavaProject jp) { if (PROVIDERS.containsKey(type.getFullyQualifiedName())) { return PROVIDERS.get(type.getFullyQualifiedName()).getProposals(jp); } else {// w w w . ja va 2 s . c o m try { for (IMethod m : type.getMethods()) { if (Flags.isStatic(m.getFlags()) && "valueOf".equals(m.getElementName())) { Proposal p = new Proposal("\"<string>\""); p.hover = new HoverImpl(m); return Collections.singletonList(p); } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return Collections.emptyList(); }
From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.util.prop.KeyCombinationProvider.java
License:Open Source License
protected IMethod findMethod(IJavaProject jp) { try {/*from ww w . j av a 2 s .co m*/ IType t = jp.findType("javafx.scene.input.KeyCombination"); for (IMethod m : t.getMethods()) { if (Flags.isStatic(m.getFlags()) && "valueOf".equals(m.getElementName())) { return m; } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
From source file:at.bestsolution.efxclipse.tooling.fxgraph.ui.util.prop.PaintProposalProvider.java
License:Open Source License
protected IMethod findMethod(IJavaProject jp) { try {// w ww. jav a 2s.c o m IType t = jp.findType("javafx.scene.paint.Color"); for (IMethod m : t.getMethods()) { if (Flags.isStatic(m.getFlags()) && "web".equals(m.getElementName()) && m.getParameters().length == 1) { return m; } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
From source file:at.bestsolution.efxclipse.tooling.fxml.compile.FxmlAnnotationCompilationParticipant.java
License:Open Source License
/** * @param context/*from w w w . j a va 2 s.c o m*/ */ private List<CategorizedProblem> checkCU(final ICompilationUnit unit, final Collection<CategorizedProblem> existingProblems) { List<CategorizedProblem> problems = new ArrayList<CategorizedProblem>(); if (existingProblems != null) { problems.addAll(existingProblems); } List<String> fxmlMethods = new ArrayList<String>(); try { IJavaProject project = unit.getJavaProject(); for (IType type : unit.getTypes()) { for (IMethod method : type.getMethods()) { for (IAnnotation a : method.getAnnotations()) { if ("FXML".equals(a.getElementName())) { ////$NON-NLS-1$ if (fxmlMethods.contains(method.getElementName())) { DefaultProblem problem = new DefaultProblem(unit.getElementName().toCharArray(), "JavaFX controller method name is not unique: " //$NON-NLS-1$ + method.getElementName(), IProblem.ExternalProblemNotFixable, new String[0], ProblemSeverities.Warning, method.getSourceRange().getOffset(), method.getSourceRange().getOffset() + method.getSourceRange().getLength(), getMethodLineNumber(type, method), 0); problems.add(problem); } fxmlMethods.add(method.getElementName()); switch (method.getNumberOfParameters()) { case 0: break; case 1: { ILocalVariable pType = method.getParameters()[0]; String[][] resolvedType = type .resolveType(Signature.toString(pType.getTypeSignature())); IType parameterType = null; if (resolvedType != null) { parameterType = project.findType(resolvedType[0][0] + "." + resolvedType[0][1]); //$NON-NLS-1$ } if (resolvedType == null || !Util.assignable(parameterType, project.findType("javafx.event.Event"))) { ////$NON-NLS-1$ DefaultProblem problem = new DefaultProblem(unit.getElementName().toCharArray(), "Parameter '" //$NON-NLS-1$ + pType.getElementName() + "' is not assignable to javafx.event.Event", //$NON-NLS-1$ IProblem.ExternalProblemNotFixable, new String[0], ProblemSeverities.Warning, pType.getSourceRange().getOffset(), pType.getSourceRange().getOffset() + pType.getSourceRange().getLength(), getMethodLineNumber(type, method), 0); problems.add(problem); } } break; default: { DefaultProblem problem = new DefaultProblem(unit.getElementName().toCharArray(), "JavaFX controller method must have 0 or exactly 1 argument", //$NON-NLS-1$ IProblem.ExternalProblemNotFixable, new String[0], ProblemSeverities.Warning, method.getSourceRange().getOffset(), method.getSourceRange().getOffset() + method.getSourceRange().getLength(), getMethodLineNumber(type, method), 0); problems.add(problem); } } } } } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } return problems; }
From source file:at.bestsolution.efxclipse.tooling.jdt.ui.internal.FXBeanJavaCompletionProposalComputer.java
License:Open Source License
@Override public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {//from ww w . j a v a 2s .c om if (context instanceof JavaContentAssistInvocationContext && false) { JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context; CompletionContext completionContext = javaContext.getCoreContext(); IJavaElement enclosingElement = null; if (completionContext.isExtended()) { enclosingElement = completionContext.getEnclosingElement(); } else { try { enclosingElement = javaContext.getCompilationUnit() .getElementAt(context.getInvocationOffset() + 1); } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } List<ICompletionProposal> l = new ArrayList<ICompletionProposal>(); if (enclosingElement != null) { IType type = (IType) enclosingElement.getAncestor(IJavaElement.TYPE); if (type == null) { return l; } try { IField[] fields = type.getFields(); IMethod[] methods = type.getMethods(); int offset = context.getInvocationOffset() - 3; if (offset > 0) { String prefix = context.getDocument().get(offset, 3); IType propType = type.getJavaProject().findType("javafx.beans.property.Property"); IType writableType = type.getJavaProject().findType("javafx.beans.value.WritableValue"); // Primitives IType booleanType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyBooleanProperty"); IType doubleType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyDoubleProperty"); IType floatType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyFloatProperty"); IType intType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyIntegerProperty"); IType longType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyLongProperty"); IType stringType = type.getJavaProject() .findType("javafx.beans.property.ReadOnlyStringProperty"); for (int i = 0; i < fields.length; i++) { IField curr = fields[i]; if (!Flags.isEnum(curr.getFlags())) { IType fieldType = toType(type, curr.getTypeSignature()); if (fieldType != null) { if (assignable(fieldType, propType)) { if ("set".equals(prefix)) { if (assignable(fieldType, writableType)) { String setterName = NamingConventions.suggestSetterName( type.getJavaProject(), curr.getElementName(), curr.getFlags(), false, null); if (!hasMethod(methods, setterName)) { StyledString s = new StyledString(setterName + "(" + toValue(fieldType, booleanType, doubleType, floatType, intType, longType, stringType) + ") : void"); s.append(" - Setter for '" + curr.getElementName() + "'", StyledString.QUALIFIER_STYLER); l.add(new CompletionProposalImpl(setterName, s)); } } } else if (Character.isWhitespace(prefix.charAt(0)) && prefix.endsWith("is")) { if (assignable(fieldType, booleanType)) { String getterName = NamingConventions.suggestGetterName( type.getJavaProject(), curr.getElementName(), curr.getFlags(), false, null); getterName = "is" + getterName.substring(3); if (!hasMethod(methods, getterName)) { StyledString s = new StyledString(getterName + "() : boolean"); s.append(" - Getter for '" + curr.getElementName() + "'", StyledString.QUALIFIER_STYLER); l.add(new CompletionProposalImpl(getterName, s)); } } } else if ("get".equals(prefix)) { if (!assignable(fieldType, booleanType)) { String getterName = NamingConventions.suggestGetterName( type.getJavaProject(), curr.getElementName(), curr.getFlags(), false, null); if (!hasMethod(methods, getterName)) { StyledString s = new StyledString(getterName + "() : " + toValue(fieldType, booleanType, doubleType, floatType, intType, longType, stringType)); s.append(" - Getter for '" + curr.getElementName() + "'", StyledString.QUALIFIER_STYLER); l.add(new CompletionProposalImpl(getterName, s)); } } } else if (Character.isWhitespace(prefix.charAt(2))) { String propertyName = curr.getElementName() + "Property"; if (!hasMethod(methods, propertyName)) { StyledString s = new StyledString(propertyName); l.add(new CompletionProposalImpl(propertyName, s)); } } } } } } } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadLocationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return l; } return Collections.emptyList(); }
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; }/*from ww w. j av a 2 s. co 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.fxide.jdt.corext.util.MethodOverrideTester.java
License:Open Source License
/** * Finds an overridden method in a type. With generics it is possible that 2 methods in the same type are overridden at the same time. * In that case the first overridden method found is returned. * @param overriddenType The type to find methods in * @param overriding The overriding method * @return The first overridden method or <code>null</code> if no method is overridden * @throws JavaModelException if a problem occurs *///from w ww . j a v a 2 s . c o m public IMethod findOverriddenMethodInType(IType overriddenType, IMethod overriding) throws JavaModelException { int flags = overriding.getFlags(); if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overriding.isConstructor()) return null; IMethod[] overriddenMethods = overriddenType.getMethods(); for (int i = 0; i < overriddenMethods.length; i++) { IMethod overridden = overriddenMethods[i]; flags = overridden.getFlags(); if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overridden.isConstructor()) continue; if (isSubsignature(overriding, overridden)) { return overridden; } } return null; }
From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java
License:Open Source License
/** * Finds an overriding method in a type. * @param overridingType The type to find methods in * @param overridden The overridden method * @return The overriding method or <code>null</code> if no method is overriding. * @throws JavaModelException if a problem occurs *///from ww w. ja v a 2s .c o m public IMethod findOverridingMethodInType(IType overridingType, IMethod overridden) throws JavaModelException { int flags = overridden.getFlags(); if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overridden.isConstructor()) return null; IMethod[] overridingMethods = overridingType.getMethods(); for (int i = 0; i < overridingMethods.length; i++) { IMethod overriding = overridingMethods[i]; flags = overriding.getFlags(); if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overriding.isConstructor()) continue; if (isSubsignature(overriding, overridden)) { return overriding; } } return null; }
From source file:at.bestsolution.fxide.jdt.editor.internal.MethodUtil.java
License:Open Source License
/** * Finds a method by name. This searches for a method with a name and * 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 The name of the method to find * @param paramTypes The type signatures of the parameters e.g. * <code>{"QString;","I"}</code> * @param isConstructor If the method is a constructor * @param type the given type in which to search for methods * @param typeVariables a map from type variables to concretely used types * @return The found method or <code>null</code>, if nothing found * @throws JavaModelException if the method does not exist or if an exception occurs while accessing its corresponding resource *//*from w ww . j ava 2 s . c o m*/ private IMethod findMethod(String name, String[] paramTypes, boolean isConstructor, IType type, Map<String, char[]> typeVariables) throws JavaModelException { System.err.println(name + "(" + Arrays.toString(paramTypes) + ")"); IMethod[] methods = type.getMethods(); for (int i = methods.length - 1; i >= 0; i--) { System.err.println("CHECKING: " + methods[i]); if (isSameMethodSignature(name, paramTypes, isConstructor, methods[i], typeVariables, type)) { System.err.println("FOUND!!!!!"); return methods[i]; } } return fFallbackMatch; }