下面列出了怎么用org.eclipse.jdt.core.dom.MarkerAnnotation的API类实例代码及写法,或者点击链接到github查看源代码。
private MethodDeclaration createNewMethodDeclarationNode(MemberActionInfo info, TypeVariableMaplet[] mapping, CompilationUnitRewrite rewriter, MethodDeclaration oldMethod) throws JavaModelException {
Assert.isTrue(!info.isFieldInfo());
IMethod method= (IMethod) info.getMember();
ASTRewrite rewrite= rewriter.getASTRewrite();
AST ast= rewrite.getAST();
MethodDeclaration newMethod= ast.newMethodDeclaration();
copyBodyOfPushedDownMethod(rewrite, method, oldMethod, newMethod, mapping);
newMethod.setConstructor(oldMethod.isConstructor());
copyExtraDimensions(oldMethod, newMethod);
if (info.copyJavadocToCopiesInSubclasses())
copyJavadocNode(rewrite, oldMethod, newMethod);
final IJavaProject project= rewriter.getCu().getJavaProject();
if (info.isNewMethodToBeDeclaredAbstract() && JavaModelUtil.is50OrHigher(project) && JavaPreferencesSettings.getCodeGenerationSettings(project).overrideAnnotation) {
final MarkerAnnotation annotation= ast.newMarkerAnnotation();
annotation.setTypeName(ast.newSimpleName("Override")); //$NON-NLS-1$
newMethod.modifiers().add(annotation);
}
copyAnnotations(oldMethod, newMethod);
newMethod.modifiers().addAll(ASTNodeFactory.newModifiers(ast, info.getNewModifiersForCopyInSubclass(oldMethod.getModifiers())));
newMethod.setName(ast.newSimpleName(oldMethod.getName().getIdentifier()));
copyReturnType(rewrite, method.getCompilationUnit(), oldMethod, newMethod, mapping);
copyParameters(rewrite, method.getCompilationUnit(), oldMethod, newMethod, mapping);
copyThrownExceptions(oldMethod, newMethod);
copyTypeParameters(oldMethod, newMethod);
return newMethod;
}
private void createAbstractMethod(final IMethod sourceMethod, final CompilationUnitRewrite sourceRewriter, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration destination, final TypeVariableMaplet[] mapping, final CompilationUnitRewrite targetRewrite, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
final MethodDeclaration oldMethod= ASTNodeSearchUtil.getMethodDeclarationNode(sourceMethod, declaringCuNode);
if (JavaModelUtil.is50OrHigher(sourceMethod.getJavaProject()) && (fSettings.overrideAnnotation || JavaCore.ERROR.equals(sourceMethod.getJavaProject().getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION, true)))) {
final MarkerAnnotation annotation= sourceRewriter.getAST().newMarkerAnnotation();
annotation.setTypeName(sourceRewriter.getAST().newSimpleName("Override")); //$NON-NLS-1$
sourceRewriter.getASTRewrite().getListRewrite(oldMethod, MethodDeclaration.MODIFIERS2_PROPERTY).insertFirst(annotation, sourceRewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_override_annotation, SET_PULL_UP));
}
final MethodDeclaration newMethod= targetRewrite.getAST().newMethodDeclaration();
newMethod.setBody(null);
newMethod.setConstructor(false);
copyExtraDimensions(oldMethod, newMethod);
newMethod.setJavadoc(null);
int modifiers= getModifiersWithUpdatedVisibility(sourceMethod, Modifier.ABSTRACT | JdtFlags.clearFlag(Modifier.NATIVE | Modifier.FINAL, sourceMethod.getFlags()), adjustments, monitor, false, status);
if (oldMethod.isVarargs())
modifiers&= ~Flags.AccVarargs;
newMethod.modifiers().addAll(ASTNodeFactory.newModifiers(targetRewrite.getAST(), modifiers));
newMethod.setName(((SimpleName) ASTNode.copySubtree(targetRewrite.getAST(), oldMethod.getName())));
copyReturnType(targetRewrite.getASTRewrite(), getDeclaringType().getCompilationUnit(), oldMethod, newMethod, mapping);
copyParameters(targetRewrite.getASTRewrite(), getDeclaringType().getCompilationUnit(), oldMethod, newMethod, mapping);
copyThrownExceptions(oldMethod, newMethod);
copyTypeParameters(oldMethod, newMethod);
ImportRewriteContext context= new ContextSensitiveImportRewriteContext(destination, targetRewrite.getImportRewrite());
ImportRewriteUtil.addImports(targetRewrite, context, oldMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
targetRewrite.getASTRewrite().getListRewrite(destination, destination.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, destination.bodyDeclarations()), targetRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_abstract_method, SET_PULL_UP));
}
boolean checkExisting(List<IExtendedModifier> existingModifiers, ListRewrite listRewrite, TextEditGroup editGroup) {
for (Object mod : existingModifiers) {
if (mod instanceof MarkerAnnotation) {
MarkerAnnotation annotation= (MarkerAnnotation) mod;
String existingName= annotation.getTypeName().getFullyQualifiedName();
int lastDot= fAnnotationToRemove.lastIndexOf('.');
if (existingName.equals(fAnnotationToRemove) || (lastDot != -1 && fAnnotationToRemove.substring(lastDot + 1).equals(existingName))) {
if (!fAllowRemove)
return false; // veto this change
listRewrite.remove(annotation, editGroup);
return true;
}
// paranoia: check if by accident the annotation is already present (shouldn't happen):
lastDot= fAnnotationToAdd.lastIndexOf('.');
if (existingName.equals(fAnnotationToAdd) || (lastDot != -1 && fAnnotationToAdd.substring(lastDot + 1).equals(existingName))) {
return false; // already present
}
}
}
return true;
}
private Expression newDefaultExpression(AST ast, ITypeBinding type, ImportRewriteContext context) {
if (type.isPrimitive()) {
String name= type.getName();
if ("boolean".equals(name)) { //$NON-NLS-1$
return ast.newBooleanLiteral(false);
} else {
return ast.newNumberLiteral("0"); //$NON-NLS-1$
}
}
if (type == ast.resolveWellKnownType("java.lang.String")) { //$NON-NLS-1$
return ast.newStringLiteral();
}
if (type.isArray()) {
ArrayInitializer initializer= ast.newArrayInitializer();
initializer.expressions().add(newDefaultExpression(ast, type.getElementType(), context));
return initializer;
}
if (type.isAnnotation()) {
MarkerAnnotation annotation= ast.newMarkerAnnotation();
annotation.setTypeName(ast.newName(getImportRewrite().addImport(type, context)));
return annotation;
}
return ast.newNullLiteral();
}
@Override
public boolean visit(final MarkerAnnotation node) {
this.appendToBuffer("@");
node.getTypeName().accept(this);
this.appendSpaceToBuffer();
return false;
}
public boolean visit(MarkerAnnotation annotation) {
/*
* MarkerAnnotation: @ TypeName
*/
activateDiffStyle(annotation);
appendAtSign();
handleExpression(annotation.getTypeName());
deactivateDiffStyle(annotation);
return false;
}
private void handleModifier(IExtendedModifier extendedModifier) {
if(extendedModifier instanceof Modifier) {
visit((Modifier) extendedModifier);
}
else if(extendedModifier instanceof MarkerAnnotation) {
visit((MarkerAnnotation) extendedModifier);
}
else if(extendedModifier instanceof NormalAnnotation) {
visit((NormalAnnotation) extendedModifier);
}
else if(extendedModifier instanceof SingleMemberAnnotation) {
visit((SingleMemberAnnotation) extendedModifier);
}
}
@Override
public boolean visit(MarkerAnnotation node) {
return visitAnnotation(node);
}
private MarkerAnnotation createEmptyJsonPojoBuilderAnnotation(AST ast) {
return ast.newMarkerAnnotation();
}
public void attachAnnotation(AST ast, MethodDeclaration method, String annotationName) {
MarkerAnnotation nonNullAnnotation = createMarkerAnnotation(ast, annotationName);
method.modifiers().add(0, nonNullAnnotation);
}
public void attachAnnotation(AST ast, SingleVariableDeclaration methodParameterDeclaration, String annotationName) {
MarkerAnnotation nonNullAnnotation = createMarkerAnnotation(ast, annotationName);
methodParameterDeclaration.modifiers().add(0, nonNullAnnotation);
}
private MarkerAnnotation createMarkerAnnotation(AST ast, String annotation) {
MarkerAnnotation markerAnnotation = ast.newMarkerAnnotation();
markerAnnotation.setTypeName(ast.newSimpleName(annotation));
return markerAnnotation;
}
@Override
public void endVisit(MarkerAnnotation node) {
// nothing to do for marker annotations;
}
@Override
public void endVisit(MarkerAnnotation node) {
// nothing to do for marker annotations;
}
@Override
public boolean visit(MarkerAnnotation node) {
if (node.subtreeMatch(fMatcher, fNodeToMatch))
return matches(node);
return super.visit(node);
}
@Override
public boolean visit(MarkerAnnotation node) {
return false;
}
@Override
public void endVisit(MarkerAnnotation node) {
endVisitNode(node);
}
@Override
public boolean visit(MarkerAnnotation node) {
return visitNode(node);
}
@Override
public boolean visit(MarkerAnnotation node) {
typeRefFound(node.getTypeName());
return false;
}
public boolean visit(MarkerAnnotation node) {
if (found(node, node) && this.resolveBinding)
this.foundBinding = node.resolveAnnotationBinding();
return true;
}
/**
* handles: @ TypeName We do not use this one because we want to tie the
* creation of annotation instances with the ensuring of bindings (e.g.,
* {@link InJavaImporter#ensureTypeFromTypeBinding(ITypeBinding)}). Thus, we
* prefer to call the annotation creation explicitly from the other visit
* methods (e.g., {link {@link #visit(TypeDeclaration)}
*/
@Override
public boolean visit(MarkerAnnotation node) {
addTypeAnnotationSourceAnchor(node);
return true;
}