Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 230441 Details for
Bug 406469
[1.8][dom ast] ASTRewrite support for PackageQualifiedType
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Proposed Patch - WIP
Fix-for-Bug-406469--18dom-ast-ASTRewrite-for-Package.patch (text/plain), 8.08 KB, created by
Manoj N Palat
on 2013-05-03 00:46:08 EDT
(
hide
)
Description:
Proposed Patch - WIP
Filename:
MIME Type:
Creator:
Manoj N Palat
Created:
2013-05-03 00:46:08 EDT
Size:
8.08 KB
patch
obsolete
>diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTypeAnnotationsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTypeAnnotationsTest.java >index bb1ab58..abb6b56 100644 >--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTypeAnnotationsTest.java >+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTypeAnnotationsTest.java >@@ -860,4 +860,115 @@ > assertEqualString(preview, buf.toString()); > } > >+ /** >+ * ASTRewriterTests for PackageQualifiedType >+ * @throws Exception >+ * >+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=406469 >+ */ >+ public void testPackageQualifiedTypeAnnotations() throws Exception { >+ if (this.apiLevel < AST.JLS8) return; >+ IPackageFragment pack1= this.sourceFolder.createPackageFragment("test406469.bug", false, null); >+ String contents = "package test406469.bug;\n" + >+ "import java.lang.annotation.*;\n" + >+ "public class X {\n" + >+ " @Target(ElementType.TYPE_USE)\n" + >+ " @Retention(RetentionPolicy.RUNTIME)\n" + >+ " @Documented\n" + >+ " static @interface NonNull { }\n" + >+ " class Inner {}\n" + >+ " \n" + >+ " /**\n" + >+ " * @param arg \n" + >+ " */\n" + >+ " test406469.bug.@NonNull IOException foo(\n" + >+ " test406469.bug.@NonNull FileNotFoundException arg)\n" + >+ " throws test406469.bug.@NonNull EOFException {\n" + >+ " try {\n" + >+ " test406469.bug.@NonNull IOError e = new test406469.bug.IOError();\n" + >+ " throw e;\n" + >+ " } catch (test406469.bug.@NonNull IOError e) {\n" + >+ " }\n" + >+ " return null;\n" + >+ " } \n" + >+ " test406469.bug.@NonNull X.@NonNull Inner fInner;\n" + >+ "} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface A {} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface B {} \n" + >+ "\n" + >+ "class Outer {\n" + >+ " public class Inner {\n" + >+ " public class Deeper {}\n" + >+ " }\n" + >+ "}\n" + >+ "class IOException extends Exception {private static final long serialVersionUID=10001L;}\n" + >+ "class FileNotFoundException extends Exception{private static final long serialVersionUID=10002L;}\n" + >+ "class EOFException extends Exception{private static final long serialVersionUID=10003L;}\n" + >+ "class IOError extends Exception{private static final long serialVersionUID=10004L;}\n"; >+ StringBuffer buf = new StringBuffer(contents); >+ ICompilationUnit cu= pack1.createCompilationUnit("X.java", buf.toString(), false, null); >+ CompilationUnit astRoot= createAST(cu, /* resolve */ true, false); >+ ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); >+ AST ast= astRoot.getAST(); >+ TypeDeclaration typeDeclaration= findTypeDeclaration(astRoot, "X"); >+ MethodDeclaration methodDeclaration= findMethodDeclaration(typeDeclaration, "foo"); >+ { //replace an annotation. >+ PackageQualifiedType packageQualifiedType = (PackageQualifiedType) methodDeclaration.getReturnType2(); >+ MarkerAnnotation markerAnnotation= ast.newMarkerAnnotation(); >+ markerAnnotation.setTypeName(ast.newSimpleName("Marker")); >+ rewrite.replace((ASTNode) packageQualifiedType.annotations().get(0), markerAnnotation, null); >+ >+ // remove an annotation >+ SingleVariableDeclaration param = (SingleVariableDeclaration) methodDeclaration.parameters().get(0); >+ packageQualifiedType = (PackageQualifiedType) param.getType(); >+ rewrite.remove((ASTNode) packageQualifiedType.annotations().get(0), null); >+ >+ // insert an annotation >+ packageQualifiedType = (PackageQualifiedType) methodDeclaration.thrownExceptionTypes().get(0); >+ markerAnnotation= ast.newMarkerAnnotation(); >+ markerAnnotation.setTypeName(ast.newSimpleName("Marker")); >+ rewrite.getListRewrite(packageQualifiedType, PackageQualifiedType.ANNOTATIONS_PROPERTY).insertLast(markerAnnotation, null); >+ } >+ String preview= evaluateRewrite(cu, rewrite); >+ String contentsmodified = "package test406469.bug;\n" + >+ "import java.lang.annotation.*;\n" + >+ "public class X {\n" + >+ " @Target(ElementType.TYPE_USE)\n" + >+ " @Retention(RetentionPolicy.RUNTIME)\n" + >+ " @Documented\n" + >+ " static @interface NonNull { }\n" + >+ " class Inner {}\n" + >+ " \n" + >+ " /**\n" + >+ " * @param arg \n" + >+ " */\n" + >+ " test406469.bug.@Marker IOException foo(\n" + >+ " FileNotFoundException arg)\n" + >+ " throws test406469.bug.@NonNull @Marker EOFException {\n" + >+ " try {\n" + >+ " test406469.bug.@NonNull IOError e = new test406469.bug.IOError();\n" + >+ " throw e;\n" + >+ " } catch (test406469.bug.@NonNull IOError e) {\n" + >+ " }\n" + >+ " return null;\n" + >+ " } \n" + >+ " test406469.bug.@NonNull X.@NonNull Inner fInner;\n" + >+ "} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface A {} \n" + >+ "@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface B {} \n" + >+ "\n" + >+ "class Outer {\n" + >+ " public class Inner {\n" + >+ " public class Deeper {}\n" + >+ " }\n" + >+ "}\n" + >+ "class IOException extends Exception {private static final long serialVersionUID=10001L;}\n" + >+ "class FileNotFoundException extends Exception{private static final long serialVersionUID=10002L;}\n" + >+ "class EOFException extends Exception{private static final long serialVersionUID=10003L;}\n" + >+ "class IOError extends Exception{private static final long serialVersionUID=10004L;}\n"; >+ assertEqualString(preview, contentsmodified); >+ } >+ > } >\ No newline at end of file >diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java >index 7adedd2..fdd430d 100644 >--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java >+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java >@@ -3972,6 +3972,20 @@ > return false; > } > /* (non-Javadoc) >+ * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PackageQualifiedType) >+ */ >+ public boolean visit(PackageQualifiedType node) { >+ if (!hasChildrenChanges(node)) { >+ return doVisitUnchangedChildren(node); >+ } >+ rewriteRequiredNode(node, PackageQualifiedType.QUALIFIER_PROPERTY); >+ if (node.getAST().apiLevel() >= AST.JLS8) { >+ rewriteTypeAnnotations(node, PackageQualifiedType.ANNOTATIONS_PROPERTY, node.getStartPosition()); >+ } >+ rewriteRequiredNode(node, PackageQualifiedType.NAME_PROPERTY); >+ return false; >+ } >+ /* (non-Javadoc) > * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ParameterizedType) > */ > public boolean visit(ParameterizedType node) { >diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java >index a031c72..84b5379 100644 >--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java >+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java >@@ -1409,6 +1409,21 @@ > this.result.append(')'); > return false; > } >+ >+ /* >+ * @see ASTVisitor#visit(PackageQualifiedType) >+ * @since 3.9 >+ */ >+ public boolean visit(PackageQualifiedType node) { >+ getChildNode(node, PackageQualifiedType.QUALIFIER_PROPERTY).accept(this); >+ this.result.append('.'); >+ if (node.getAST().apiLevel() >= AST.JLS8) { >+ visitList(node, PackageQualifiedType.ANNOTATIONS_PROPERTY, String.valueOf(' '), Util.EMPTY_STRING, String.valueOf(' ')); >+ } >+ getChildNode(node, PackageQualifiedType.NAME_PROPERTY).accept(this); >+ return false; >+ } >+ > /* > * @see ASTVisitor#visit(ParameterizedType) > * @since 3.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 406469
:
230441
|
230443