org.eclipse.jdt.core.dom.ASTRequestor#org.eclipse.jdt.core.IMember源码实例Demo

下面列出了org.eclipse.jdt.core.dom.ASTRequestor#org.eclipse.jdt.core.IMember 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
public boolean canEnable() throws JavaModelException {
	if (!super.canEnable() || fJavaElements.length == 0)
		return false;

	for (int i= 0; i < fJavaElements.length; i++) {
		if (fJavaElements[i] instanceof IMember) {
			IMember member= (IMember) fJavaElements[i];
			// we can copy some binary members, but not all
			if (member.isBinary() && member.getSourceRange() == null)
				return false;
		}
	}

	return true;
}
 
public static IMember[] getPushDownMembers(final IType type) throws JavaModelException {
	final List<IMember> list= new ArrayList<IMember>(3);
	if (type.exists()) {
		IMember[] members= type.getFields();
		for (int index= 0; index < members.length; index++) {
			if (isPushDownAvailable(members[index]))
				list.add(members[index]);
		}
		members= type.getMethods();
		for (int index= 0; index < members.length; index++) {
			if (isPushDownAvailable(members[index]))
				list.add(members[index]);
		}
	}
	return list.toArray(new IMember[list.size()]);
}
 
public static boolean isMoveAvailable(final IResource[] resources, final IJavaElement[] elements) throws JavaModelException {
	if (elements != null) {
		for (int index= 0; index < elements.length; index++) {
			IJavaElement element= elements[index];
			if (element == null || !element.exists())
				return false;
			if ((element instanceof IType) && ((IType) element).isLocal())
				return false;
			if ((element instanceof IPackageDeclaration))
				return false;
			if (element instanceof IField && JdtFlags.isEnum((IMember) element))
				return false;
		}
	}
	return ReorgPolicyFactory.createMovePolicy(resources, elements).canEnable();
}
 
private void addMethodStubForAbstractMethod(final IMethod sourceMethod, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration typeToCreateStubIn, final ICompilationUnit newCu, final CompilationUnitRewrite rewriter, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws CoreException {
	final MethodDeclaration methodToCreateStubFor= ASTNodeSearchUtil.getMethodDeclarationNode(sourceMethod, declaringCuNode);
	final AST ast= rewriter.getRoot().getAST();
	final MethodDeclaration newMethod= ast.newMethodDeclaration();
	newMethod.setBody(createMethodStub(methodToCreateStubFor, ast));
	newMethod.setConstructor(false);
	copyExtraDimensions(methodToCreateStubFor, newMethod);
	newMethod.modifiers().addAll(ASTNodeFactory.newModifiers(ast, getModifiersWithUpdatedVisibility(sourceMethod, JdtFlags.clearFlag(Modifier.NATIVE | Modifier.ABSTRACT, methodToCreateStubFor.getModifiers()), adjustments, new SubProgressMonitor(monitor, 1), false, status)));
	newMethod.setName(((SimpleName) ASTNode.copySubtree(ast, methodToCreateStubFor.getName())));
	final TypeVariableMaplet[] mapping= TypeVariableUtil.composeMappings(TypeVariableUtil.subTypeToSuperType(getDeclaringType(), getDestinationType()), TypeVariableUtil.superTypeToInheritedType(getDestinationType(), ((IType) typeToCreateStubIn.resolveBinding().getJavaElement())));
	copyReturnType(rewriter.getASTRewrite(), getDeclaringType().getCompilationUnit(), methodToCreateStubFor, newMethod, mapping);
	copyParameters(rewriter.getASTRewrite(), getDeclaringType().getCompilationUnit(), methodToCreateStubFor, newMethod, mapping);
	copyThrownExceptions(methodToCreateStubFor, newMethod);
	newMethod.setJavadoc(createJavadocForStub(typeToCreateStubIn.getName().getIdentifier(), methodToCreateStubFor, newMethod, newCu, rewriter.getASTRewrite()));
	ImportRewriteContext context= new ContextSensitiveImportRewriteContext(typeToCreateStubIn, rewriter.getImportRewrite());
	ImportRewriteUtil.addImports(rewriter, context, newMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
	rewriter.getASTRewrite().getListRewrite(typeToCreateStubIn, typeToCreateStubIn.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, typeToCreateStubIn.bodyDeclarations()), rewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_method_stub, SET_PULL_UP));
}
 
private static IMember[] getSelectedMembers(final IStructuredSelection selection) {
	if (selection.isEmpty())
		return null;
	if (selection.size() == 1) {
		try {
			final IType type= RefactoringAvailabilityTester.getSingleSelectedType(selection);
			if (type != null)
				return new IType[] {type};
		} catch (JavaModelException exception) {
			JavaPlugin.log(exception);
		}
	}
	for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
		if (!(iterator.next() instanceof IMember))
			return null;
	}
	final Set<IMember> set= new HashSet<IMember>();
	@SuppressWarnings("unchecked")
	List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
	set.addAll(selectionList);
	return set.toArray(new IMember[set.size()]);
}
 
源代码6 项目: eclipse.jdt.ls   文件: RefactoringScopeFactory.java
/**
 * Creates a new search scope with all compilation units possibly referencing
 * <code>javaElement</code>.
 *
 * @param javaElement
 *            the java element
 * @param considerVisibility
 *            consider visibility of javaElement iff <code>true</code>
 * @param sourceReferencesOnly
 *            consider references in source only (no references in binary)
 * @return the search scope
 * @throws JavaModelException
 *             if an error occurs
 */
public static IJavaSearchScope create(IJavaElement javaElement, boolean considerVisibility, boolean sourceReferencesOnly) throws JavaModelException {
	if (considerVisibility & javaElement instanceof IMember) {
		IMember member = (IMember) javaElement;
		if (JdtFlags.isPrivate(member)) {
			if (member.getCompilationUnit() != null) {
				return SearchEngine.createJavaSearchScope(new IJavaElement[] { member.getCompilationUnit() });
			} else {
				return SearchEngine.createJavaSearchScope(new IJavaElement[] { member });
			}
		}
		// Removed code that does some optimizations regarding package visible members. The problem is that
		// there can be a package fragment with the same name in a different source folder or project. So we
		// have to treat package visible members like public or protected members.
	}

	IJavaProject javaProject = javaElement.getJavaProject();
	return SearchEngine.createJavaSearchScope(getAllScopeElements(javaProject, sourceReferencesOnly), false);
}
 
源代码7 项目: eclipse.jdt.ls   文件: ReorgPolicyFactory.java
@Override
public boolean canEnable() throws JavaModelException {
	if (!super.canEnable() || fJavaElements.length == 0) {
		return false;
	}

	for (int i= 0; i < fJavaElements.length; i++) {
		if (fJavaElements[i] instanceof IMember) {
			IMember member= (IMember) fJavaElements[i];
			// we can copy some binary members, but not all
			if (member.isBinary() && member.getSourceRange() == null) {
				return false;
			}
		}
	}

	return true;
}
 
public static CallHierarchyViewPart openView(IMember[] input, IWorkbenchWindow window) {
  	if (input.length == 0) {
	MessageDialog.openInformation(window.getShell(), CallHierarchyMessages.CallHierarchyUI_selectionDialog_title,
			CallHierarchyMessages.CallHierarchyUI_open_operation_unavialable);
	return null;
}
      IWorkbenchPage page= window.getActivePage();
try {
	CallHierarchyViewPart viewPart= getDefault().findLRUCallHierarchyViewPart(page); //find the first view which is not pinned
	String secondaryId= null;
	if (viewPart == null) {
		if (page.findViewReference(CallHierarchyViewPart.ID_CALL_HIERARCHY) != null) //all the current views are pinned, open a new instance
			secondaryId= String.valueOf(++getDefault().fViewCount);
	} else
		secondaryId= viewPart.getViewSite().getSecondaryId();
	viewPart= (CallHierarchyViewPart)page.showView(CallHierarchyViewPart.ID_CALL_HIERARCHY, secondaryId, IWorkbenchPage.VIEW_ACTIVATE);
	viewPart.setInputElements(input);
	return viewPart;
      } catch (CoreException e) {
          ExceptionHandler.handle(e, window.getShell(),
              CallHierarchyMessages.CallHierarchyUI_error_open_view, e.getMessage());
      }
      return null;
  }
 
protected void updateUIElementEnablement() {
	final IMember[] checked= getCheckedMembers();
	IMember[] extractable;
	try {
		extractable= getExtractableMembers();
	} catch (JavaModelException exception) {
		extractable= new IMember[0];
		JavaPlugin.log(exception);
	}
	final boolean enabled= containsMethods(checked);
	fDeclarePublicCheckbox.setEnabled(enabled);
	fDeclareAbstractCheckbox.setEnabled(enabled);
	fGenerateAnnotationsCheckbox.setEnabled(enabled);
	fGenerateCommentsCheckbox.setEnabled(enabled);
	fInstanceofCheckbox.setEnabled(fReplaceAllCheckbox.getSelection());
	fSelectAllButton.setEnabled(checked.length < extractable.length);
	fDeselectAllButton.setEnabled(checked.length > 0);
}
 
public static boolean isMoveAvailable(final IResource[] resources, final IJavaElement[] elements) throws JavaModelException {
	if (elements != null) {
		for (int index = 0; index < elements.length; index++) {
			IJavaElement element = elements[index];
			if (element == null || !element.exists()) {
				return false;
			}
			if ((element instanceof IType) && ((IType) element).isLocal()) {
				return false;
			}
			if ((element instanceof IPackageDeclaration)) {
				return false;
			}
			if (element instanceof IField && JdtFlags.isEnum((IMember) element)) {
				return false;
			}
		}
	}
	return ReorgPolicyFactory.createMovePolicy(resources, elements).canEnable();
}
 
/**
 * Appends the styled label for a type parameter.
 *
 * @param typeParameter the element to render
 * @param flags the rendering flags. Flags with names starting with 'T_' are considered.
 */
public void appendTypeParameterLabel(ITypeParameter typeParameter, long flags) {
	try {
		appendTypeParameterWithBounds(typeParameter, flags);

		// post qualification
		if (getFlag(flags, JavaElementLabels.TP_POST_QUALIFIED)) {
			fBuffer.append(JavaElementLabels.CONCAT_STRING);
			IMember declaringMember= typeParameter.getDeclaringMember();
			appendElementLabel(declaringMember, JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
		}

	} catch (JavaModelException e) {
		JavaPlugin.log(e); // NotExistsException will not reach this point
	}
}
 
@Override
public boolean filters(JavaElementMatch match) {
	Object element= match.getElement();
	if (element instanceof IMember) {
		try {
			return ! JdtFlags.isStatic((IMember) element);
		} catch (JavaModelException e) {
			JavaPlugin.log(e);
		}
	}
	return false;
}
 
@Override
public void run(IStructuredSelection selection) {
	try {
		IMember member= getMember(selection);
		if (member == null || !ActionUtil.isEditable(getShell(), member))
			return;
		ISourceRange range= member.getNameRange();
		RefactoringExecutionStarter.startChangeTypeRefactoring(member.getCompilationUnit(), getShell(), range.getOffset(), range.getLength());
	} catch (CoreException e) {
		ExceptionHandler.handle(e, RefactoringMessages.ChangeTypeAction_dialog_title, RefactoringMessages.ChangeTypeAction_exception);
	}
}
 
private RefactoringStatus checkIfDeclaredIn(final IMember element, final IType type) throws JavaModelException {
	if (element instanceof IMethod)
		return checkIfMethodDeclaredIn((IMethod) element, type);
	else if (element instanceof IField)
		return checkIfFieldDeclaredIn((IField) element, type);
	else if (element instanceof IType)
		return checkIfTypeDeclaredIn((IType) element, type);
	Assert.isTrue(false);
	return null;
}
 
private static IMember[] convertToMemberArray(Object[] obj) {
	if (obj == null)
		return null;
	Set<Object> memberSet= new HashSet<Object>();
	memberSet.addAll(Arrays.asList(obj));
	return memberSet.toArray(new IMember[memberSet.size()]);
}
 
源代码16 项目: eclipse.jdt.ls   文件: ReorgPolicyFactory.java
protected void copyToDestination(IJavaElement element, CompilationUnitRewrite targetRewriter, CompilationUnit sourceCuNode, CompilationUnit targetCuNode) throws CoreException {
	final ASTRewrite rewrite= targetRewriter.getASTRewrite();
	switch (element.getElementType()) {
		case IJavaElement.FIELD:
			copyMemberToDestination((IMember) element, targetRewriter, sourceCuNode, targetCuNode, createNewFieldDeclarationNode(((IField) element), rewrite, sourceCuNode));
			break;
		case IJavaElement.IMPORT_CONTAINER:
			copyImportsToDestination((IImportContainer) element, rewrite, sourceCuNode, targetCuNode);
			break;
		case IJavaElement.IMPORT_DECLARATION:
			copyImportToDestination((IImportDeclaration) element, rewrite, sourceCuNode, targetCuNode);
			break;
		case IJavaElement.INITIALIZER:
			copyInitializerToDestination((IInitializer) element, targetRewriter, sourceCuNode, targetCuNode);
			break;
		case IJavaElement.METHOD:
			copyMethodToDestination((IMethod) element, targetRewriter, sourceCuNode, targetCuNode);
			break;
		case IJavaElement.PACKAGE_DECLARATION:
			copyPackageDeclarationToDestination((IPackageDeclaration) element, rewrite, sourceCuNode, targetCuNode);
			break;
		case IJavaElement.TYPE:
			copyTypeToDestination((IType) element, targetRewriter, sourceCuNode, targetCuNode);
			break;

		default:
			Assert.isTrue(false);
	}
}
 
/**
 * {@inheritDoc}
 */
@Override
public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
	try {
		monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1);
		RefactoringStatus status= new RefactoringStatus();
		status.merge(checkPossibleSubclasses(new SubProgressMonitor(monitor, 1)));
		if (status.hasFatalError())
			return status;
		status.merge(checkDeclaringType(new SubProgressMonitor(monitor, 1)));
		if (status.hasFatalError())
			return status;
		status.merge(checkIfMembersExist());
		if (status.hasFatalError())
			return status;
		fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType());
		List<IMember> list= Arrays.asList(fMembersToMove);
		for (int offset= 0; offset < fMemberInfos.length; offset++) {
			MemberActionInfo info= fMemberInfos[offset];
			if (list.contains(info.getMember()))
				info.setAction(MemberActionInfo.PUSH_DOWN_ACTION);
		}
		return status;
	} finally {
		monitor.done();
	}
}
 
@Override
public IEditorPart open(URI uri, IMember member, boolean select) {
	if (member != null) {
		URI memberURI = new TypeURIHelper().getFullURI(member);
		String identifier = memberURI.fragment();
		// we decode the qualified name into the uri using query, such that it can be read out in #findEObjectByURI again
		URI uriWithQuery = uri.appendQuery(identifier);
		return super.open(uriWithQuery, select);
	}
	return open(uri, select);
}
 
private MemberActionInfo[] asMemberActionInfos() {
	final List<IMember> toPullUp= Arrays.asList(fProcessor.getMembersToMove());
	final IMember[] members= fProcessor.getPullableMembersOfDeclaringType();
	final MemberActionInfo[] result= new MemberActionInfo[members.length];
	for (int i= 0; i < members.length; i++) {
		final IMember member= members[i];
		if (toPullUp.contains(member))
			result[i]= new MemberActionInfo(member, PULL_UP_ACTION);
		else
			result[i]= new MemberActionInfo(member, MemberActionInfo.NO_ACTION);
	}
	return result;
}
 
public Object getNewElement() throws CoreException {
	IMember member= fTypeParameter.getDeclaringMember();
	if (member instanceof IType) {
		IType type= (IType) member;
		return type.getTypeParameter(getNewElementName());
	} else if (member instanceof IMethod) {
		IMethod method= (IMethod) member;
		return method.getTypeParameter(getNewElementName());
	} else {
		JavaPlugin.logErrorMessage("Unexpected sub-type of IMember: " + member.getClass().getName()); //$NON-NLS-1$
		Assert.isTrue(false);
	}
	return null;
}
 
源代码21 项目: Eclipse-Postfix-Code-Completion   文件: JdtFlags.java
public static boolean isAbstract(IMember member) throws JavaModelException{
	int flags= member.getFlags();
	if (!member.isBinary() && isInterfaceOrAnnotationMethod(member)) {
		return !Flags.isStatic(flags) && !Flags.isDefaultMethod(flags);
	}
	return Flags.isAbstract(flags);
}
 
源代码22 项目: eclipse.jdt.ls   文件: JDTUtils.java
/**
 * {@code true} if the element is deprecated. Otherwise, {@code false}.
 */
public static boolean isDeprecated(IJavaElement element) throws JavaModelException {
	Assert.isNotNull(element, "element");
	if (element instanceof ITypeRoot) {
		return Flags.isDeprecated(((ITypeRoot) element).findPrimaryType().getFlags());
	} else if (element instanceof IMember) {
		return Flags.isDeprecated(((IMember) element).getFlags());
	}
	return false;
}
 
/**
 * Check whether anyone accesses the members of the moved type from the
 * outside. Those may need to have their visibility adjusted.
 * @param member the member
 * @param monitor the progress monitor to use
 * @throws JavaModelException if an error occurs
 */
private void adjustMemberVisibility(final IMember member, final IProgressMonitor monitor) throws JavaModelException {

	if (member instanceof IType) {
		// recursively check accessibility of member type's members
		final IJavaElement[] typeMembers= ((IType) member).getChildren();
		for (int i= 0; i < typeMembers.length; i++) {
			if (! (typeMembers[i] instanceof IInitializer))
				adjustMemberVisibility((IMember) typeMembers[i], monitor);
		}
	}

	if (member.equals(fReferenced) || Modifier.isPublic(member.getFlags()))
		return;

	final SearchResultGroup[] references= findReferences(member, monitor);
	for (int i= 0; i < references.length; i++) {
		final SearchMatch[] searchResults= references[i].getSearchResults();
		for (int k= 0; k < searchResults.length; k++) {
			final IJavaElement referenceToMember= (IJavaElement) searchResults[k].getElement();
			if (fAdjustments.get(member) == null && referenceToMember instanceof IMember && !isInsideMovedMember(referenceToMember)) {
				// check whether the member is still visible from the
				// destination. As we are moving a type, the destination is
				// a package or another type.
				adjustIncomingVisibility(fReferencing, member, new SubProgressMonitor(monitor, 1));
			}
		}
	}
}
 
源代码24 项目: Pydev   文件: JavaElementToken.java
private Reader getContentReader(IMember member, IProgressMonitor monitor) throws JavaModelException {
    Reader contentReader = JavadocContentAccess.getContentReader(member, true);
    if (contentReader != null) {
        return contentReader;
    }

    if (member.getOpenable().getBuffer() == null) { // only if no source available
        String s = member.getAttachedJavadoc(monitor);
        if (s != null) {
            return new StringReader(s);
        }
    }
    return null;
}
 
private static Map<IType, IMember[]> createTypeToMemberArrayMapping(final IMember[] members) {
	final Map<IType, HashSet<IMember>> typeToMemberSet= createTypeToMemberSetMapping(members);

	final Map<IType, IMember[]> typeToMemberArray= new HashMap<IType, IMember[]>();
	for (final Iterator<IType> iter= typeToMemberSet.keySet().iterator(); iter.hasNext();) {
		final IType type= iter.next();
		final Set<IMember> memberSet= typeToMemberSet.get(type);
		final IMember[] memberArray= memberSet.toArray(new IMember[memberSet.size()]);
		typeToMemberArray.put(type, memberArray);
	}
	return typeToMemberArray;
}
 
源代码26 项目: eclipse.jdt.ls   文件: JdtFlags.java
public static boolean isFinal(IMember member) throws JavaModelException{
	if (isInterfaceOrAnnotationField(member)) {
		return true;
	}
	if (isAnonymousType(member)) {
		return true;
	}
	if (isEnumConstant(member) || isEnumTypeFinal(member)) {
		return true;
	}
	return Flags.isFinal(member.getFlags());
}
 
private RefactoringStatus checkAbstractMembersInDestinationClasses(IMember[] membersToPushDown, IType[] destinationClassesForAbstract) throws JavaModelException {
	RefactoringStatus result= new RefactoringStatus();
	IMember[] abstractMembersToPushDown= getAbstractMembers(membersToPushDown);
	for (int index= 0; index < destinationClassesForAbstract.length; index++) {
		result.merge(MemberCheckUtil.checkMembersInDestinationType(abstractMembersToPushDown, destinationClassesForAbstract[index]));
	}
	return result;
}
 
/**
 * {@inheritDoc}
 */
@Override
public void run(final IStructuredSelection selection) {
	try {
		final IMember[] members= getSelectedMembers(selection);
		if (RefactoringAvailabilityTester.isExtractSupertypeAvailable(members) && ActionUtil.isEditable(getShell(), members[0]))
			RefactoringExecutionStarter.startExtractSupertypeRefactoring(members, getShell());
	} catch (final JavaModelException exception) {
		ExceptionHandler.handle(exception, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.OpenRefactoringWizardAction_exception);
	}
}
 
public static boolean isMoveStaticMembersAvailable(final IMember[] members) throws JavaModelException {
	if (members == null)
		return false;
	if (members.length == 0)
		return false;
	if (!isMoveStaticAvailable(members))
		return false;
	if (!isCommonDeclaringType(members))
		return false;
	return true;
}
 
public static void startExtractSupertypeRefactoring(final IMember[] members, final Shell shell) throws JavaModelException {
	if (!RefactoringAvailabilityTester.isExtractSupertypeAvailable(members))
		return;
	IJavaProject project= null;
	if (members != null && members.length > 0)
		project= members[0].getJavaProject();
	ExtractSupertypeProcessor processor= new ExtractSupertypeProcessor(members, JavaPreferencesSettings.getCodeGenerationSettings(project));
	Refactoring refactoring= new ProcessorBasedRefactoring(processor);
	ExtractSupertypeWizard wizard= new ExtractSupertypeWizard(processor, refactoring);
	new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING);
}