Merge
This commit is contained in:
commit
c4cbd8f70c
@ -60,7 +60,7 @@ import com.sun.tools.javac.comp.Env;
|
|||||||
import com.sun.tools.javac.comp.MemberEnter;
|
import com.sun.tools.javac.comp.MemberEnter;
|
||||||
import com.sun.tools.javac.comp.Resolve;
|
import com.sun.tools.javac.comp.Resolve;
|
||||||
import com.sun.tools.javac.model.JavacElements;
|
import com.sun.tools.javac.model.JavacElements;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
|
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
@ -240,10 +240,11 @@ public class JavacTrees extends Trees {
|
|||||||
|
|
||||||
public String getDocComment(TreePath path) {
|
public String getDocComment(TreePath path) {
|
||||||
CompilationUnitTree t = path.getCompilationUnit();
|
CompilationUnitTree t = path.getCompilationUnit();
|
||||||
if (t instanceof JCTree.JCCompilationUnit) {
|
Tree leaf = path.getLeaf();
|
||||||
|
if (t instanceof JCTree.JCCompilationUnit && leaf instanceof JCTree) {
|
||||||
JCCompilationUnit cu = (JCCompilationUnit) t;
|
JCCompilationUnit cu = (JCCompilationUnit) t;
|
||||||
if (cu.docComments != null) {
|
if (cu.docComments != null) {
|
||||||
return cu.docComments.get(path.getLeaf());
|
return cu.docComments.getCommentText((JCTree) leaf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -312,7 +312,7 @@ public class Enter extends JCTree.Visitor {
|
|||||||
tree.packge);
|
tree.packge);
|
||||||
if (addEnv || (tree0.packageAnnotations.isEmpty() &&
|
if (addEnv || (tree0.packageAnnotations.isEmpty() &&
|
||||||
tree.docComments != null &&
|
tree.docComments != null &&
|
||||||
tree.docComments.get(tree) != null)) {
|
tree.docComments.hasComment(tree))) {
|
||||||
typeEnvs.put(tree.packge, topEnv);
|
typeEnvs.put(tree.packge, topEnv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -40,7 +40,7 @@ import com.sun.tools.javac.tree.JCTree.*;
|
|||||||
import com.sun.tools.javac.code.Type.*;
|
import com.sun.tools.javac.code.Type.*;
|
||||||
|
|
||||||
import com.sun.tools.javac.jvm.Target;
|
import com.sun.tools.javac.jvm.Target;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
|
|
||||||
import static com.sun.tools.javac.code.Flags.*;
|
import static com.sun.tools.javac.code.Flags.*;
|
||||||
import static com.sun.tools.javac.code.Flags.BLOCK;
|
import static com.sun.tools.javac.code.Flags.BLOCK;
|
||||||
|
@ -36,6 +36,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -284,7 +285,7 @@ public class ZipFileIndex {
|
|||||||
try {
|
try {
|
||||||
checkIndex();
|
checkIndex();
|
||||||
if (allDirs == Collections.EMPTY_SET) {
|
if (allDirs == Collections.EMPTY_SET) {
|
||||||
allDirs = new HashSet<RelativeDirectory>(directories.keySet());
|
allDirs = new java.util.LinkedHashSet<RelativeDirectory>(directories.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
return allDirs;
|
return allDirs;
|
||||||
@ -572,7 +573,7 @@ public class ZipFileIndex {
|
|||||||
|
|
||||||
// Add each of the files
|
// Add each of the files
|
||||||
if (entryCount > 0) {
|
if (entryCount > 0) {
|
||||||
directories = new HashMap<RelativeDirectory, DirectoryEntry>();
|
directories = new LinkedHashMap<RelativeDirectory, DirectoryEntry>();
|
||||||
ArrayList<Entry> entryList = new ArrayList<Entry>();
|
ArrayList<Entry> entryList = new ArrayList<Entry>();
|
||||||
int pos = 2;
|
int pos = 2;
|
||||||
for (int i = 0; i < entryCount; i++) {
|
for (int i = 0; i < entryCount; i++) {
|
||||||
@ -867,7 +868,7 @@ public class ZipFileIndex {
|
|||||||
if (zipFile.lastModified() != fileStamp) {
|
if (zipFile.lastModified() != fileStamp) {
|
||||||
ret = false;
|
ret = false;
|
||||||
} else {
|
} else {
|
||||||
directories = new HashMap<RelativeDirectory, DirectoryEntry>();
|
directories = new LinkedHashMap<RelativeDirectory, DirectoryEntry>();
|
||||||
int numDirs = raf.readInt();
|
int numDirs = raf.readInt();
|
||||||
for (int nDirs = 0; nDirs < numDirs; nDirs++) {
|
for (int nDirs = 0; nDirs < numDirs; nDirs++) {
|
||||||
int dirNameBytesLen = raf.readInt();
|
int dirNameBytesLen = raf.readInt();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -31,7 +31,7 @@ import com.sun.tools.javac.tree.*;
|
|||||||
import com.sun.tools.javac.util.*;
|
import com.sun.tools.javac.util.*;
|
||||||
import com.sun.tools.javac.util.List;
|
import com.sun.tools.javac.util.List;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
|
|
||||||
/** This class contains the CharacterRangeTable for some method
|
/** This class contains the CharacterRangeTable for some method
|
||||||
* and the hashtable for mapping trees or lists of trees to their
|
* and the hashtable for mapping trees or lists of trees to their
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -37,7 +37,7 @@ import com.sun.tools.javac.code.Symbol.*;
|
|||||||
import com.sun.tools.javac.code.Type.*;
|
import com.sun.tools.javac.code.Type.*;
|
||||||
import com.sun.tools.javac.jvm.Code.*;
|
import com.sun.tools.javac.jvm.Code.*;
|
||||||
import com.sun.tools.javac.jvm.Items.*;
|
import com.sun.tools.javac.jvm.Items.*;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
|
|
||||||
import static com.sun.tools.javac.code.Flags.*;
|
import static com.sun.tools.javac.code.Flags.*;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -28,11 +28,14 @@ package com.sun.tools.javac.model;
|
|||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.annotation.Inherited;
|
import java.lang.annotation.Inherited;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.SourceVersion;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.lang.model.type.DeclaredType;
|
import javax.lang.model.type.DeclaredType;
|
||||||
import javax.lang.model.util.Elements;
|
import javax.lang.model.util.Elements;
|
||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
|
import static javax.lang.model.util.ElementFilter.methodsIn;
|
||||||
|
|
||||||
import com.sun.tools.javac.code.*;
|
import com.sun.tools.javac.code.*;
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
import com.sun.tools.javac.code.TypeTags;
|
import com.sun.tools.javac.code.TypeTags;
|
||||||
@ -47,9 +50,7 @@ import com.sun.tools.javac.tree.TreeInfo;
|
|||||||
import com.sun.tools.javac.tree.TreeScanner;
|
import com.sun.tools.javac.tree.TreeScanner;
|
||||||
import com.sun.tools.javac.util.*;
|
import com.sun.tools.javac.util.*;
|
||||||
import com.sun.tools.javac.util.Name;
|
import com.sun.tools.javac.util.Name;
|
||||||
|
|
||||||
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
||||||
import static javax.lang.model.util.ElementFilter.methodsIn;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility methods for operating on program elements.
|
* Utility methods for operating on program elements.
|
||||||
@ -361,7 +362,7 @@ public class JavacElements implements Elements {
|
|||||||
JCCompilationUnit toplevel = treeTop.snd;
|
JCCompilationUnit toplevel = treeTop.snd;
|
||||||
if (toplevel.docComments == null)
|
if (toplevel.docComments == null)
|
||||||
return null;
|
return null;
|
||||||
return toplevel.docComments.get(tree);
|
return toplevel.docComments.getCommentText(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PackageElement getPackageOf(Element e) {
|
public PackageElement getPackageOf(Element e) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -571,7 +571,7 @@ public class JavaTokenizer {
|
|||||||
reader.scanCommentChar();
|
reader.scanCommentChar();
|
||||||
} while (reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen);
|
} while (reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen);
|
||||||
if (reader.bp < reader.buflen) {
|
if (reader.bp < reader.buflen) {
|
||||||
comments = addDocReader(comments, processComment(pos, reader.bp, CommentStyle.LINE));
|
comments = addComment(comments, processComment(pos, reader.bp, CommentStyle.LINE));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else if (reader.ch == '*') {
|
} else if (reader.ch == '*') {
|
||||||
@ -597,7 +597,7 @@ public class JavaTokenizer {
|
|||||||
}
|
}
|
||||||
if (reader.ch == '/') {
|
if (reader.ch == '/') {
|
||||||
reader.scanChar();
|
reader.scanChar();
|
||||||
comments = addDocReader(comments, processComment(pos, reader.bp, style));
|
comments = addComment(comments, processComment(pos, reader.bp, style));
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
lexError(pos, "unclosed.comment");
|
lexError(pos, "unclosed.comment");
|
||||||
@ -693,10 +693,10 @@ public class JavaTokenizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//where
|
//where
|
||||||
List<Comment> addDocReader(List<Comment> docReaders, Comment docReader) {
|
List<Comment> addComment(List<Comment> comments, Comment comment) {
|
||||||
return docReaders == null ?
|
return comments == null ?
|
||||||
List.of(docReader) :
|
List.of(comment) :
|
||||||
docReaders.prepend(docReader);
|
comments.prepend(comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return the position where a lexical error occurred;
|
/** Return the position where a lexical error occurred;
|
||||||
@ -780,6 +780,10 @@ public class JavaTokenizer {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSourcePos(int pos) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
public CommentStyle getStyle() {
|
public CommentStyle getStyle() {
|
||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ public class JavacParser implements Parser {
|
|||||||
this.allowMethodReferences = source.allowMethodReferences() &&
|
this.allowMethodReferences = source.allowMethodReferences() &&
|
||||||
fac.options.isSet("allowMethodReferences");
|
fac.options.isSet("allowMethodReferences");
|
||||||
this.keepDocComments = keepDocComments;
|
this.keepDocComments = keepDocComments;
|
||||||
docComments = keepDocComments ? new HashMap<JCTree,String>() : null;
|
docComments = newDocCommentTable(keepDocComments);
|
||||||
this.keepLineMap = keepLineMap;
|
this.keepLineMap = keepLineMap;
|
||||||
this.errorTree = F.Erroneous();
|
this.errorTree = F.Erroneous();
|
||||||
endPosTable = newEndPosTable(keepEndPositions);
|
endPosTable = newEndPosTable(keepEndPositions);
|
||||||
@ -128,6 +128,11 @@ public class JavacParser implements Parser {
|
|||||||
? new SimpleEndPosTable()
|
? new SimpleEndPosTable()
|
||||||
: new EmptyEndPosTable();
|
: new EmptyEndPosTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected DocCommentTable newDocCommentTable(boolean keepDocComments) {
|
||||||
|
return keepDocComments ? new SimpleDocCommentTable() : null;
|
||||||
|
}
|
||||||
|
|
||||||
/** Switch: Should generics be recognized?
|
/** Switch: Should generics be recognized?
|
||||||
*/
|
*/
|
||||||
boolean allowGenerics;
|
boolean allowGenerics;
|
||||||
@ -417,21 +422,21 @@ public class JavacParser implements Parser {
|
|||||||
|
|
||||||
/* ---------- doc comments --------- */
|
/* ---------- doc comments --------- */
|
||||||
|
|
||||||
/** A hashtable to store all documentation comments
|
/** A table to store all documentation comments
|
||||||
* indexed by the tree nodes they refer to.
|
* indexed by the tree nodes they refer to.
|
||||||
* defined only if option flag keepDocComment is set.
|
* defined only if option flag keepDocComment is set.
|
||||||
*/
|
*/
|
||||||
private final Map<JCTree, String> docComments;
|
private final DocCommentTable docComments;
|
||||||
|
|
||||||
/** Make an entry into docComments hashtable,
|
/** Make an entry into docComments hashtable,
|
||||||
* provided flag keepDocComments is set and given doc comment is non-null.
|
* provided flag keepDocComments is set and given doc comment is non-null.
|
||||||
* @param tree The tree to be used as index in the hashtable
|
* @param tree The tree to be used as index in the hashtable
|
||||||
* @param dc The doc comment to associate with the tree, or null.
|
* @param dc The doc comment to associate with the tree, or null.
|
||||||
*/
|
*/
|
||||||
void attach(JCTree tree, String dc) {
|
void attach(JCTree tree, Comment dc) {
|
||||||
if (keepDocComments && dc != null) {
|
if (keepDocComments && dc != null) {
|
||||||
// System.out.println("doc comment = ");System.out.println(dc);//DEBUG
|
// System.out.println("doc comment = ");System.out.println(dc);//DEBUG
|
||||||
docComments.put(tree, dc);
|
docComments.putComment(tree, dc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1858,7 +1863,7 @@ public class JavacParser implements Parser {
|
|||||||
return List.of(parseStatement());
|
return List.of(parseStatement());
|
||||||
case MONKEYS_AT:
|
case MONKEYS_AT:
|
||||||
case FINAL: {
|
case FINAL: {
|
||||||
String dc = token.comment(CommentStyle.JAVADOC);
|
Comment dc = token.comment(CommentStyle.JAVADOC);
|
||||||
JCModifiers mods = modifiersOpt();
|
JCModifiers mods = modifiersOpt();
|
||||||
if (token.kind == INTERFACE ||
|
if (token.kind == INTERFACE ||
|
||||||
token.kind == CLASS ||
|
token.kind == CLASS ||
|
||||||
@ -1875,13 +1880,13 @@ public class JavacParser implements Parser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case ABSTRACT: case STRICTFP: {
|
case ABSTRACT: case STRICTFP: {
|
||||||
String dc = token.comment(CommentStyle.JAVADOC);
|
Comment dc = token.comment(CommentStyle.JAVADOC);
|
||||||
JCModifiers mods = modifiersOpt();
|
JCModifiers mods = modifiersOpt();
|
||||||
return List.of(classOrInterfaceOrEnumDeclaration(mods, dc));
|
return List.of(classOrInterfaceOrEnumDeclaration(mods, dc));
|
||||||
}
|
}
|
||||||
case INTERFACE:
|
case INTERFACE:
|
||||||
case CLASS:
|
case CLASS:
|
||||||
String dc = token.comment(CommentStyle.JAVADOC);
|
Comment dc = token.comment(CommentStyle.JAVADOC);
|
||||||
return List.of(classOrInterfaceOrEnumDeclaration(modifiersOpt(), dc));
|
return List.of(classOrInterfaceOrEnumDeclaration(modifiersOpt(), dc));
|
||||||
case ENUM:
|
case ENUM:
|
||||||
case ASSERT:
|
case ASSERT:
|
||||||
@ -2418,7 +2423,7 @@ public class JavacParser implements Parser {
|
|||||||
JCExpression type,
|
JCExpression type,
|
||||||
Name name,
|
Name name,
|
||||||
boolean reqInit,
|
boolean reqInit,
|
||||||
String dc,
|
Comment dc,
|
||||||
T vdefs)
|
T vdefs)
|
||||||
{
|
{
|
||||||
vdefs.append(variableDeclaratorRest(pos, mods, type, name, reqInit, dc));
|
vdefs.append(variableDeclaratorRest(pos, mods, type, name, reqInit, dc));
|
||||||
@ -2434,7 +2439,7 @@ public class JavacParser implements Parser {
|
|||||||
/** VariableDeclarator = Ident VariableDeclaratorRest
|
/** VariableDeclarator = Ident VariableDeclaratorRest
|
||||||
* ConstantDeclarator = Ident ConstantDeclaratorRest
|
* ConstantDeclarator = Ident ConstantDeclaratorRest
|
||||||
*/
|
*/
|
||||||
JCVariableDecl variableDeclarator(JCModifiers mods, JCExpression type, boolean reqInit, String dc) {
|
JCVariableDecl variableDeclarator(JCModifiers mods, JCExpression type, boolean reqInit, Comment dc) {
|
||||||
return variableDeclaratorRest(token.pos, mods, type, ident(), reqInit, dc);
|
return variableDeclaratorRest(token.pos, mods, type, ident(), reqInit, dc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2445,7 +2450,7 @@ public class JavacParser implements Parser {
|
|||||||
* @param dc The documentation comment for the variable declarations, or null.
|
* @param dc The documentation comment for the variable declarations, or null.
|
||||||
*/
|
*/
|
||||||
JCVariableDecl variableDeclaratorRest(int pos, JCModifiers mods, JCExpression type, Name name,
|
JCVariableDecl variableDeclaratorRest(int pos, JCModifiers mods, JCExpression type, Name name,
|
||||||
boolean reqInit, String dc) {
|
boolean reqInit, Comment dc) {
|
||||||
type = bracketsOpt(type);
|
type = bracketsOpt(type);
|
||||||
JCExpression init = null;
|
JCExpression init = null;
|
||||||
if (token.kind == EQ) {
|
if (token.kind == EQ) {
|
||||||
@ -2539,7 +2544,7 @@ public class JavacParser implements Parser {
|
|||||||
seenImport = true;
|
seenImport = true;
|
||||||
defs.append(importDeclaration());
|
defs.append(importDeclaration());
|
||||||
} else {
|
} else {
|
||||||
String docComment = token.comment(CommentStyle.JAVADOC);
|
Comment docComment = token.comment(CommentStyle.JAVADOC);
|
||||||
if (firstTypeDecl && !seenImport && !seenPackage) {
|
if (firstTypeDecl && !seenImport && !seenPackage) {
|
||||||
docComment = firstToken.comment(CommentStyle.JAVADOC);
|
docComment = firstToken.comment(CommentStyle.JAVADOC);
|
||||||
consumedToplevelDoc = true;
|
consumedToplevelDoc = true;
|
||||||
@ -2597,7 +2602,7 @@ public class JavacParser implements Parser {
|
|||||||
/** TypeDeclaration = ClassOrInterfaceOrEnumDeclaration
|
/** TypeDeclaration = ClassOrInterfaceOrEnumDeclaration
|
||||||
* | ";"
|
* | ";"
|
||||||
*/
|
*/
|
||||||
JCTree typeDeclaration(JCModifiers mods, String docComment) {
|
JCTree typeDeclaration(JCModifiers mods, Comment docComment) {
|
||||||
int pos = token.pos;
|
int pos = token.pos;
|
||||||
if (mods == null && token.kind == SEMI) {
|
if (mods == null && token.kind == SEMI) {
|
||||||
nextToken();
|
nextToken();
|
||||||
@ -2612,7 +2617,7 @@ public class JavacParser implements Parser {
|
|||||||
* @param mods Any modifiers starting the class or interface declaration
|
* @param mods Any modifiers starting the class or interface declaration
|
||||||
* @param dc The documentation comment for the class, or null.
|
* @param dc The documentation comment for the class, or null.
|
||||||
*/
|
*/
|
||||||
JCStatement classOrInterfaceOrEnumDeclaration(JCModifiers mods, String dc) {
|
JCStatement classOrInterfaceOrEnumDeclaration(JCModifiers mods, Comment dc) {
|
||||||
if (token.kind == CLASS) {
|
if (token.kind == CLASS) {
|
||||||
return classDeclaration(mods, dc);
|
return classDeclaration(mods, dc);
|
||||||
} else if (token.kind == INTERFACE) {
|
} else if (token.kind == INTERFACE) {
|
||||||
@ -2656,7 +2661,7 @@ public class JavacParser implements Parser {
|
|||||||
* @param mods The modifiers starting the class declaration
|
* @param mods The modifiers starting the class declaration
|
||||||
* @param dc The documentation comment for the class, or null.
|
* @param dc The documentation comment for the class, or null.
|
||||||
*/
|
*/
|
||||||
protected JCClassDecl classDeclaration(JCModifiers mods, String dc) {
|
protected JCClassDecl classDeclaration(JCModifiers mods, Comment dc) {
|
||||||
int pos = token.pos;
|
int pos = token.pos;
|
||||||
accept(CLASS);
|
accept(CLASS);
|
||||||
Name name = ident();
|
Name name = ident();
|
||||||
@ -2685,7 +2690,7 @@ public class JavacParser implements Parser {
|
|||||||
* @param mods The modifiers starting the interface declaration
|
* @param mods The modifiers starting the interface declaration
|
||||||
* @param dc The documentation comment for the interface, or null.
|
* @param dc The documentation comment for the interface, or null.
|
||||||
*/
|
*/
|
||||||
protected JCClassDecl interfaceDeclaration(JCModifiers mods, String dc) {
|
protected JCClassDecl interfaceDeclaration(JCModifiers mods, Comment dc) {
|
||||||
int pos = token.pos;
|
int pos = token.pos;
|
||||||
accept(INTERFACE);
|
accept(INTERFACE);
|
||||||
Name name = ident();
|
Name name = ident();
|
||||||
@ -2708,7 +2713,7 @@ public class JavacParser implements Parser {
|
|||||||
* @param mods The modifiers starting the enum declaration
|
* @param mods The modifiers starting the enum declaration
|
||||||
* @param dc The documentation comment for the enum, or null.
|
* @param dc The documentation comment for the enum, or null.
|
||||||
*/
|
*/
|
||||||
protected JCClassDecl enumDeclaration(JCModifiers mods, String dc) {
|
protected JCClassDecl enumDeclaration(JCModifiers mods, Comment dc) {
|
||||||
int pos = token.pos;
|
int pos = token.pos;
|
||||||
accept(ENUM);
|
accept(ENUM);
|
||||||
Name name = ident();
|
Name name = ident();
|
||||||
@ -2767,7 +2772,7 @@ public class JavacParser implements Parser {
|
|||||||
/** EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ]
|
/** EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ]
|
||||||
*/
|
*/
|
||||||
JCTree enumeratorDeclaration(Name enumName) {
|
JCTree enumeratorDeclaration(Name enumName) {
|
||||||
String dc = token.comment(CommentStyle.JAVADOC);
|
Comment dc = token.comment(CommentStyle.JAVADOC);
|
||||||
int flags = Flags.PUBLIC|Flags.STATIC|Flags.FINAL|Flags.ENUM;
|
int flags = Flags.PUBLIC|Flags.STATIC|Flags.FINAL|Flags.ENUM;
|
||||||
if (token.deprecatedFlag()) {
|
if (token.deprecatedFlag()) {
|
||||||
flags |= Flags.DEPRECATED;
|
flags |= Flags.DEPRECATED;
|
||||||
@ -2856,7 +2861,7 @@ public class JavacParser implements Parser {
|
|||||||
nextToken();
|
nextToken();
|
||||||
return List.<JCTree>nil();
|
return List.<JCTree>nil();
|
||||||
} else {
|
} else {
|
||||||
String dc = token.comment(CommentStyle.JAVADOC);
|
Comment dc = token.comment(CommentStyle.JAVADOC);
|
||||||
int pos = token.pos;
|
int pos = token.pos;
|
||||||
JCModifiers mods = modifiersOpt();
|
JCModifiers mods = modifiersOpt();
|
||||||
if (token.kind == CLASS ||
|
if (token.kind == CLASS ||
|
||||||
@ -2936,7 +2941,7 @@ public class JavacParser implements Parser {
|
|||||||
Name name,
|
Name name,
|
||||||
List<JCTypeParameter> typarams,
|
List<JCTypeParameter> typarams,
|
||||||
boolean isInterface, boolean isVoid,
|
boolean isInterface, boolean isVoid,
|
||||||
String dc) {
|
Comment dc) {
|
||||||
List<JCVariableDecl> params = formalParameters();
|
List<JCVariableDecl> params = formalParameters();
|
||||||
if (!isVoid) type = bracketsOpt(type);
|
if (!isVoid) type = bracketsOpt(type);
|
||||||
List<JCExpression> thrown = List.nil();
|
List<JCExpression> thrown = List.nil();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -62,19 +62,54 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
@Override
|
@Override
|
||||||
protected Comment processComment(int pos, int endPos, CommentStyle style) {
|
protected Comment processComment(int pos, int endPos, CommentStyle style) {
|
||||||
char[] buf = reader.getRawCharacters(pos, endPos);
|
char[] buf = reader.getRawCharacters(pos, endPos);
|
||||||
return new JavadocComment(new ColReader(fac, buf, buf.length), style);
|
return new JavadocComment(new DocReader(fac, buf, buf.length, pos), style);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a specialized version of UnicodeReader that keeps track of the
|
* This is a specialized version of UnicodeReader that keeps track of the
|
||||||
* column position within a given character stream (used for Javadoc processing).
|
* column position within a given character stream (used for Javadoc processing),
|
||||||
|
* and which builds a table for mapping positions in the comment string to
|
||||||
|
* positions in the source file.
|
||||||
*/
|
*/
|
||||||
static class ColReader extends UnicodeReader {
|
static class DocReader extends UnicodeReader {
|
||||||
|
|
||||||
int col;
|
int col;
|
||||||
|
int startPos;
|
||||||
|
|
||||||
ColReader(ScannerFactory fac, char[] input, int inputLength) {
|
/**
|
||||||
|
* A buffer for building a table for mapping positions in {@link #sbuf}
|
||||||
|
* to positions in the source buffer.
|
||||||
|
*
|
||||||
|
* The array is organized as a series of pairs of integers: the first
|
||||||
|
* number in each pair specifies a position in the comment text,
|
||||||
|
* the second number in each pair specifies the corresponding position
|
||||||
|
* in the source buffer. The pairs are sorted in ascending order.
|
||||||
|
*
|
||||||
|
* Since the mapping function is generally continuous, with successive
|
||||||
|
* positions in the string corresponding to successive positions in the
|
||||||
|
* source buffer, the table only needs to record discontinuities in
|
||||||
|
* the mapping. The values of intermediate positions can be inferred.
|
||||||
|
*
|
||||||
|
* Discontinuities may occur in a number of places: when a newline
|
||||||
|
* is followed by whitespace and asterisks (which are ignored),
|
||||||
|
* when a tab is expanded into spaces, and when unicode escapes
|
||||||
|
* are used in the source buffer.
|
||||||
|
*
|
||||||
|
* Thus, to find the source position of any position, p, in the comment
|
||||||
|
* string, find the index, i, of the pair whose string offset
|
||||||
|
* ({@code pbuf[i] }) is closest to but not greater than p. Then,
|
||||||
|
* {@code sourcePos(p) = pbuf[i+1] + (p - pbuf[i]) }.
|
||||||
|
*/
|
||||||
|
int[] pbuf = new int[128];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The index of the next empty slot in the pbuf buffer.
|
||||||
|
*/
|
||||||
|
int pp = 0;
|
||||||
|
|
||||||
|
DocReader(ScannerFactory fac, char[] input, int inputLength, int startPos) {
|
||||||
super(fac, input, inputLength);
|
super(fac, input, inputLength);
|
||||||
|
this.startPos = startPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -147,19 +182,43 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void putChar(char ch, boolean scan) {
|
||||||
|
// At this point, bp is the position of the current character in buf,
|
||||||
|
// and sp is the position in sbuf where this character will be put.
|
||||||
|
// Record a new entry in pbuf if pbuf is empty or if sp and its
|
||||||
|
// corresponding source position are not equidistant from the
|
||||||
|
// corresponding values in the latest entry in the pbuf array.
|
||||||
|
// (i.e. there is a discontinuity in the map function.)
|
||||||
|
if ((pp == 0)
|
||||||
|
|| (sp - pbuf[pp - 2] != (startPos + bp) - pbuf[pp - 1])) {
|
||||||
|
if (pp + 1 >= pbuf.length) {
|
||||||
|
int[] new_pbuf = new int[pbuf.length * 2];
|
||||||
|
System.arraycopy(pbuf, 0, new_pbuf, 0, pbuf.length);
|
||||||
|
pbuf = new_pbuf;
|
||||||
|
}
|
||||||
|
pbuf[pp] = sp;
|
||||||
|
pbuf[pp + 1] = startPos + bp;
|
||||||
|
pp += 2;
|
||||||
|
}
|
||||||
|
super.putChar(ch, scan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class JavadocComment extends JavaTokenizer.BasicComment<ColReader> {
|
protected class JavadocComment extends JavaTokenizer.BasicComment<DocReader> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated and stripped contents of doc comment
|
* Translated and stripped contents of doc comment
|
||||||
*/
|
*/
|
||||||
private String docComment = null;
|
private String docComment = null;
|
||||||
|
private int[] docPosns = null;
|
||||||
|
|
||||||
JavadocComment(ColReader comment_reader, CommentStyle cs) {
|
JavadocComment(DocReader reader, CommentStyle cs) {
|
||||||
super(comment_reader, cs);
|
super(reader, cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getText() {
|
public String getText() {
|
||||||
if (!scanned && cs == CommentStyle.JAVADOC) {
|
if (!scanned && cs == CommentStyle.JAVADOC) {
|
||||||
scanDocComment();
|
scanDocComment();
|
||||||
@ -167,6 +226,33 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
return docComment;
|
return docComment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSourcePos(int pos) {
|
||||||
|
// Binary search to find the entry for which the string index is
|
||||||
|
// less than pos. Since docPosns is a list of pairs of integers
|
||||||
|
// we must make sure the index is always even.
|
||||||
|
// If we find an exact match for pos, the other item in the pair
|
||||||
|
// gives the source pos; otherwise, compute the source position
|
||||||
|
// relative to the best match found in the array.
|
||||||
|
if (pos < 0 || pos >= docComment.length())
|
||||||
|
throw new StringIndexOutOfBoundsException();
|
||||||
|
if (docPosns == null)
|
||||||
|
return -1;
|
||||||
|
int start = 0;
|
||||||
|
int end = docPosns.length;
|
||||||
|
while (start < end - 2) {
|
||||||
|
// find an even index midway between start and end
|
||||||
|
int index = ((start + end) / 4) * 2;
|
||||||
|
if (docPosns[index] < pos)
|
||||||
|
start = index;
|
||||||
|
else if (docPosns[index] == pos)
|
||||||
|
return docPosns[index + 1];
|
||||||
|
else
|
||||||
|
end = index;
|
||||||
|
}
|
||||||
|
return docPosns[start + 1] + (pos - docPosns[start]);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("fallthrough")
|
@SuppressWarnings("fallthrough")
|
||||||
protected void scanDocComment() {
|
protected void scanDocComment() {
|
||||||
@ -209,7 +295,8 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
// whitespace, then it consumes any stars, then it
|
// whitespace, then it consumes any stars, then it
|
||||||
// puts the rest of the line into our buffer.
|
// puts the rest of the line into our buffer.
|
||||||
while (comment_reader.bp < comment_reader.buflen) {
|
while (comment_reader.bp < comment_reader.buflen) {
|
||||||
|
int begin_bp = comment_reader.bp;
|
||||||
|
char begin_ch = comment_reader.ch;
|
||||||
// The wsLoop consumes whitespace from the beginning
|
// The wsLoop consumes whitespace from the beginning
|
||||||
// of each line.
|
// of each line.
|
||||||
wsLoop:
|
wsLoop:
|
||||||
@ -263,10 +350,10 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
break outerLoop;
|
break outerLoop;
|
||||||
}
|
}
|
||||||
} else if (! firstLine) {
|
} else if (! firstLine) {
|
||||||
//The current line does not begin with a '*' so we will indent it.
|
// The current line does not begin with a '*' so we will
|
||||||
for (int i = 1; i < comment_reader.col; i++) {
|
// treat it as comment
|
||||||
comment_reader.putChar(' ', false);
|
comment_reader.bp = begin_bp;
|
||||||
}
|
comment_reader.ch = begin_ch;
|
||||||
}
|
}
|
||||||
// The textLoop processes the rest of the characters
|
// The textLoop processes the rest of the characters
|
||||||
// on the line, adding them to our buffer.
|
// on the line, adding them to our buffer.
|
||||||
@ -334,11 +421,14 @@ public class JavadocTokenizer extends JavaTokenizer {
|
|||||||
|
|
||||||
// Store the text of the doc comment
|
// Store the text of the doc comment
|
||||||
docComment = comment_reader.chars();
|
docComment = comment_reader.chars();
|
||||||
|
docPosns = new int[comment_reader.pp];
|
||||||
|
System.arraycopy(comment_reader.pbuf, 0, docPosns, 0, docPosns.length);
|
||||||
} else {
|
} else {
|
||||||
docComment = "";
|
docComment = "";
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
scanned = true;
|
scanned = true;
|
||||||
|
comment_reader = null;
|
||||||
if (docComment != null &&
|
if (docComment != null &&
|
||||||
docComment.matches("(?sm).*^\\s*@deprecated( |$).*")) {
|
docComment.matches("(?sm).*^\\s*@deprecated( |$).*")) {
|
||||||
deprecatedFlag = true;
|
deprecatedFlag = true;
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sun.tools.javac.parser;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.sun.tools.javac.parser.Tokens.Comment;
|
||||||
|
import com.sun.tools.javac.tree.DocCommentTable;
|
||||||
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* <p><b>This is NOT part of any supported API.
|
||||||
|
* If you write code that depends on this, you do so at your own risk.
|
||||||
|
* This code and its internal interfaces are subject to change or
|
||||||
|
* deletion without notice.</b>
|
||||||
|
*/
|
||||||
|
public class SimpleDocCommentTable implements DocCommentTable {
|
||||||
|
Map<JCTree, Comment> table;
|
||||||
|
|
||||||
|
SimpleDocCommentTable() {
|
||||||
|
table = new HashMap<JCTree, Comment>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasComment(JCTree tree) {
|
||||||
|
return table.containsKey(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Comment getComment(JCTree tree) {
|
||||||
|
return table.get(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommentText(JCTree tree) {
|
||||||
|
Comment c = getComment(tree);
|
||||||
|
return (c == null) ? null : c.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putComment(JCTree tree, Comment c) {
|
||||||
|
table.put(tree, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -294,6 +294,7 @@ public class Tokens {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getText();
|
String getText();
|
||||||
|
int getSourcePos(int index);
|
||||||
CommentStyle getStyle();
|
CommentStyle getStyle();
|
||||||
boolean isDeprecated();
|
boolean isDeprecated();
|
||||||
}
|
}
|
||||||
@ -371,11 +372,11 @@ public class Tokens {
|
|||||||
* Preserve classic semantics - if multiple javadocs are found on the token
|
* Preserve classic semantics - if multiple javadocs are found on the token
|
||||||
* the last one is returned
|
* the last one is returned
|
||||||
*/
|
*/
|
||||||
public String comment(Comment.CommentStyle style) {
|
public Comment comment(Comment.CommentStyle style) {
|
||||||
List<Comment> readers = getReaders(Comment.CommentStyle.JAVADOC);
|
List<Comment> comments = getComments(Comment.CommentStyle.JAVADOC);
|
||||||
return readers.isEmpty() ?
|
return comments.isEmpty() ?
|
||||||
null :
|
null :
|
||||||
readers.head.getText();
|
comments.head;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -383,22 +384,22 @@ public class Tokens {
|
|||||||
* javadoc comment attached to this token contains the '@deprecated' string
|
* javadoc comment attached to this token contains the '@deprecated' string
|
||||||
*/
|
*/
|
||||||
public boolean deprecatedFlag() {
|
public boolean deprecatedFlag() {
|
||||||
for (Comment r : getReaders(Comment.CommentStyle.JAVADOC)) {
|
for (Comment c : getComments(Comment.CommentStyle.JAVADOC)) {
|
||||||
if (r.isDeprecated()) {
|
if (c.isDeprecated()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Comment> getReaders(Comment.CommentStyle style) {
|
private List<Comment> getComments(Comment.CommentStyle style) {
|
||||||
if (comments == null) {
|
if (comments == null) {
|
||||||
return List.nil();
|
return List.nil();
|
||||||
} else {
|
} else {
|
||||||
ListBuffer<Comment> buf = ListBuffer.lb();
|
ListBuffer<Comment> buf = ListBuffer.lb();
|
||||||
for (Comment r : comments) {
|
for (Comment c : comments) {
|
||||||
if (r.getStyle() == style) {
|
if (c.getStyle() == style) {
|
||||||
buf.add(r);
|
buf.add(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return buf.toList();
|
return buf.toList();
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation. Oracle designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Oracle in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
package com.sun.tools.javac.tree;
|
||||||
|
|
||||||
|
import com.sun.tools.javac.parser.Tokens.Comment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A table giving the doc comment, if any, for any tree node.
|
||||||
|
*
|
||||||
|
* <p><b>This is NOT part of any supported API.
|
||||||
|
* If you write code that depends on this, you do so at your own
|
||||||
|
* risk. This code and its internal interfaces are subject to change
|
||||||
|
* or deletion without notice.</b>
|
||||||
|
*/
|
||||||
|
public interface DocCommentTable {
|
||||||
|
/**
|
||||||
|
* Check if a tree node has a corresponding doc comment.
|
||||||
|
*/
|
||||||
|
public boolean hasComment(JCTree tree);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Comment token containing the doc comment, if any, for a tree node.
|
||||||
|
*/
|
||||||
|
public Comment getComment(JCTree tree);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plain text of the doc comment, if any, for a tree node.
|
||||||
|
*/
|
||||||
|
public String getCommentText(JCTree tree);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the Comment to be associated with a tree node.
|
||||||
|
*/
|
||||||
|
public void putComment(JCTree tree, Comment c);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -22,9 +22,8 @@
|
|||||||
* or visit www.oracle.com if you need additional information or have any
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
package com.sun.tools.javac.parser;
|
|
||||||
|
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
package com.sun.tools.javac.tree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the methods to access a mappings of syntax trees to end positions.
|
* Specifies the methods to access a mappings of syntax trees to end positions.
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,25 +25,23 @@
|
|||||||
|
|
||||||
package com.sun.tools.javac.tree;
|
package com.sun.tools.javac.tree;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
import javax.lang.model.element.Modifier;
|
import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.type.TypeKind;
|
import javax.lang.model.type.TypeKind;
|
||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
|
|
||||||
import com.sun.tools.javac.util.*;
|
|
||||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
|
||||||
import com.sun.tools.javac.util.List;
|
|
||||||
import com.sun.tools.javac.code.*;
|
|
||||||
import com.sun.tools.javac.code.Scope.*;
|
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
|
||||||
import com.sun.source.tree.*;
|
import com.sun.source.tree.*;
|
||||||
import com.sun.source.tree.LambdaExpressionTree.BodyKind;
|
import com.sun.source.tree.LambdaExpressionTree.BodyKind;
|
||||||
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
|
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
|
||||||
|
import com.sun.tools.javac.code.*;
|
||||||
|
import com.sun.tools.javac.code.Scope.*;
|
||||||
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
|
import com.sun.tools.javac.util.*;
|
||||||
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||||
|
import com.sun.tools.javac.util.List;
|
||||||
import static com.sun.tools.javac.code.BoundKind.*;
|
import static com.sun.tools.javac.code.BoundKind.*;
|
||||||
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
||||||
|
|
||||||
@ -491,7 +489,7 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
|
|||||||
public ImportScope namedImportScope;
|
public ImportScope namedImportScope;
|
||||||
public StarImportScope starImportScope;
|
public StarImportScope starImportScope;
|
||||||
public Position.LineMap lineMap = null;
|
public Position.LineMap lineMap = null;
|
||||||
public Map<JCTree, String> docComments = null;
|
public DocCommentTable docComments = null;
|
||||||
public EndPosTable endPositions = null;
|
public EndPosTable endPositions = null;
|
||||||
protected JCCompilationUnit(List<JCAnnotation> packageAnnotations,
|
protected JCCompilationUnit(List<JCAnnotation> packageAnnotations,
|
||||||
JCExpression pid,
|
JCExpression pid,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -29,14 +29,12 @@ import java.io.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
|
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
|
||||||
|
import com.sun.tools.javac.code.*;
|
||||||
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
|
import com.sun.tools.javac.parser.Tokens.Comment;
|
||||||
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
import com.sun.tools.javac.util.*;
|
import com.sun.tools.javac.util.*;
|
||||||
import com.sun.tools.javac.util.List;
|
import com.sun.tools.javac.util.List;
|
||||||
import com.sun.tools.javac.code.*;
|
|
||||||
|
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
|
||||||
|
|
||||||
import static com.sun.tools.javac.code.Flags.*;
|
import static com.sun.tools.javac.code.Flags.*;
|
||||||
import static com.sun.tools.javac.code.Flags.ANNOTATION;
|
import static com.sun.tools.javac.code.Flags.ANNOTATION;
|
||||||
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
||||||
@ -78,10 +76,10 @@ public class Pretty extends JCTree.Visitor {
|
|||||||
*/
|
*/
|
||||||
Name enclClassName;
|
Name enclClassName;
|
||||||
|
|
||||||
/** A hashtable mapping trees to their documentation comments
|
/** A table mapping trees to their documentation comments
|
||||||
* (can be null)
|
* (can be null)
|
||||||
*/
|
*/
|
||||||
Map<JCTree, String> docComments = null;
|
DocCommentTable docComments = null;
|
||||||
|
|
||||||
/** Align code to be indented to left margin.
|
/** Align code to be indented to left margin.
|
||||||
*/
|
*/
|
||||||
@ -233,7 +231,7 @@ public class Pretty extends JCTree.Visitor {
|
|||||||
*/
|
*/
|
||||||
public void printDocComment(JCTree tree) throws IOException {
|
public void printDocComment(JCTree tree) throws IOException {
|
||||||
if (docComments != null) {
|
if (docComments != null) {
|
||||||
String dc = docComments.get(tree);
|
String dc = docComments.getCommentText(tree);
|
||||||
if (dc != null) {
|
if (dc != null) {
|
||||||
print("/**"); println();
|
print("/**"); println();
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
@ -480,7 +478,7 @@ public class Pretty extends JCTree.Visitor {
|
|||||||
|
|
||||||
public void visitVarDef(JCVariableDecl tree) {
|
public void visitVarDef(JCVariableDecl tree) {
|
||||||
try {
|
try {
|
||||||
if (docComments != null && docComments.get(tree) != null) {
|
if (docComments != null && docComments.hasComment(tree)) {
|
||||||
println(); align();
|
println(); align();
|
||||||
}
|
}
|
||||||
printDocComment(tree);
|
printDocComment(tree);
|
||||||
|
@ -25,15 +25,14 @@
|
|||||||
|
|
||||||
package com.sun.tools.javac.tree;
|
package com.sun.tools.javac.tree;
|
||||||
|
|
||||||
|
|
||||||
import com.sun.source.tree.Tree;
|
import com.sun.source.tree.Tree;
|
||||||
|
import com.sun.tools.javac.code.*;
|
||||||
import com.sun.tools.javac.comp.AttrContext;
|
import com.sun.tools.javac.comp.AttrContext;
|
||||||
import com.sun.tools.javac.comp.Env;
|
import com.sun.tools.javac.comp.Env;
|
||||||
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
import com.sun.tools.javac.util.*;
|
import com.sun.tools.javac.util.*;
|
||||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||||
import com.sun.tools.javac.code.*;
|
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
|
||||||
|
|
||||||
import static com.sun.tools.javac.code.Flags.*;
|
import static com.sun.tools.javac.code.Flags.*;
|
||||||
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
||||||
import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
|
import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
|
||||||
@ -282,6 +281,13 @@ public class TreeInfo {
|
|||||||
return (lit.typetag == TypeTags.BOT);
|
return (lit.typetag == TypeTags.BOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getCommentText(Env<?> env, JCTree tree) {
|
||||||
|
DocCommentTable docComments = (tree.hasTag(JCTree.Tag.TOPLEVEL))
|
||||||
|
? ((JCCompilationUnit) tree).docComments
|
||||||
|
: env.toplevel.docComments;
|
||||||
|
return (docComments == null) ? null : docComments.getCommentText(tree);
|
||||||
|
}
|
||||||
|
|
||||||
/** The position of the first statement in a block, or the position of
|
/** The position of the first statement in a block, or the position of
|
||||||
* the block itself if it is empty.
|
* the block itself if it is empty.
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -32,7 +32,7 @@ import java.util.Map;
|
|||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
|
|
||||||
import com.sun.tools.javac.file.JavacFileManager;
|
import com.sun.tools.javac.file.JavacFileManager;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
|
|
||||||
import static com.sun.tools.javac.util.LayoutCharacters.*;
|
import static com.sun.tools.javac.util.LayoutCharacters.*;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -35,7 +35,7 @@ import javax.tools.JavaFileObject;
|
|||||||
|
|
||||||
import com.sun.tools.javac.api.DiagnosticFormatter;
|
import com.sun.tools.javac.api.DiagnosticFormatter;
|
||||||
import com.sun.tools.javac.code.Lint.LintCategory;
|
import com.sun.tools.javac.code.Lint.LintCategory;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
|
|
||||||
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticType.*;
|
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticType.*;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -37,7 +37,7 @@ import javax.tools.JavaFileObject;
|
|||||||
import com.sun.tools.javac.api.DiagnosticFormatter;
|
import com.sun.tools.javac.api.DiagnosticFormatter;
|
||||||
import com.sun.tools.javac.main.Main;
|
import com.sun.tools.javac.main.Main;
|
||||||
import com.sun.tools.javac.main.Option;
|
import com.sun.tools.javac.main.Option;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,14 +25,17 @@
|
|||||||
|
|
||||||
package com.sun.tools.javadoc;
|
package com.sun.tools.javadoc;
|
||||||
|
|
||||||
import com.sun.tools.javac.util.Context;
|
|
||||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
import javax.tools.JavaFileObject;
|
||||||
import com.sun.tools.javac.util.List;
|
|
||||||
import com.sun.tools.javac.code.Kinds;
|
import com.sun.tools.javac.code.Kinds;
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
import com.sun.tools.javac.comp.Enter;
|
import com.sun.tools.javac.comp.Enter;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
import javax.tools.JavaFileObject;
|
import com.sun.tools.javac.tree.TreeInfo;
|
||||||
|
import com.sun.tools.javac.util.Context;
|
||||||
|
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||||
|
import com.sun.tools.javac.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Javadoc's own enter phase does a few things above and beyond that
|
* Javadoc's own enter phase does a few things above and beyond that
|
||||||
@ -77,7 +80,7 @@ public class JavadocEnter extends Enter {
|
|||||||
public void visitTopLevel(JCCompilationUnit tree) {
|
public void visitTopLevel(JCCompilationUnit tree) {
|
||||||
super.visitTopLevel(tree);
|
super.visitTopLevel(tree);
|
||||||
if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) {
|
if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) {
|
||||||
String comment = tree.docComments.get(tree);
|
String comment = TreeInfo.getCommentText(env, tree);
|
||||||
docenv.makePackageDoc(tree.packge, comment, tree);
|
docenv.makePackageDoc(tree.packge, comment, tree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,7 +90,7 @@ public class JavadocEnter extends Enter {
|
|||||||
super.visitClassDef(tree);
|
super.visitClassDef(tree);
|
||||||
if (tree.sym == null) return;
|
if (tree.sym == null) return;
|
||||||
if (tree.sym.kind == Kinds.TYP || tree.sym.kind == Kinds.ERR) {
|
if (tree.sym.kind == Kinds.TYP || tree.sym.kind == Kinds.ERR) {
|
||||||
String comment = env.toplevel.docComments.get(tree);
|
String comment = TreeInfo.getCommentText(env, tree);
|
||||||
ClassSymbol c = tree.sym;
|
ClassSymbol c = tree.sym;
|
||||||
docenv.makeClassDoc(c, comment, tree, env.toplevel.lineMap);
|
docenv.makeClassDoc(c, comment, tree, env.toplevel.lineMap);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,13 +25,14 @@
|
|||||||
|
|
||||||
package com.sun.tools.javadoc;
|
package com.sun.tools.javadoc;
|
||||||
|
|
||||||
import com.sun.tools.javac.util.Context;
|
|
||||||
import com.sun.tools.javac.util.Position;
|
|
||||||
import com.sun.tools.javac.code.Flags;
|
import com.sun.tools.javac.code.Flags;
|
||||||
import com.sun.tools.javac.code.Kinds;
|
import com.sun.tools.javac.code.Kinds;
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
import com.sun.tools.javac.comp.MemberEnter;
|
import com.sun.tools.javac.comp.MemberEnter;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
|
import com.sun.tools.javac.tree.TreeInfo;
|
||||||
|
import com.sun.tools.javac.util.Context;
|
||||||
|
import com.sun.tools.javac.util.Position;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Javadoc's own memberEnter phase does a few things above and beyond that
|
* Javadoc's own memberEnter phase does a few things above and beyond that
|
||||||
@ -61,11 +62,12 @@ public class JavadocMemberEnter extends MemberEnter {
|
|||||||
docenv = DocEnv.instance(context);
|
docenv = DocEnv.instance(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void visitMethodDef(JCMethodDecl tree) {
|
public void visitMethodDef(JCMethodDecl tree) {
|
||||||
super.visitMethodDef(tree);
|
super.visitMethodDef(tree);
|
||||||
MethodSymbol meth = tree.sym;
|
MethodSymbol meth = tree.sym;
|
||||||
if (meth == null || meth.kind != Kinds.MTH) return;
|
if (meth == null || meth.kind != Kinds.MTH) return;
|
||||||
String docComment = env.toplevel.docComments.get(tree);
|
String docComment = TreeInfo.getCommentText(env, tree);
|
||||||
Position.LineMap lineMap = env.toplevel.lineMap;
|
Position.LineMap lineMap = env.toplevel.lineMap;
|
||||||
if (meth.isConstructor())
|
if (meth.isConstructor())
|
||||||
docenv.makeConstructorDoc(meth, docComment, tree, lineMap);
|
docenv.makeConstructorDoc(meth, docComment, tree, lineMap);
|
||||||
@ -75,12 +77,13 @@ public class JavadocMemberEnter extends MemberEnter {
|
|||||||
docenv.makeMethodDoc(meth, docComment, tree, lineMap);
|
docenv.makeMethodDoc(meth, docComment, tree, lineMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void visitVarDef(JCVariableDecl tree) {
|
public void visitVarDef(JCVariableDecl tree) {
|
||||||
super.visitVarDef(tree);
|
super.visitVarDef(tree);
|
||||||
if (tree.sym != null &&
|
if (tree.sym != null &&
|
||||||
tree.sym.kind == Kinds.VAR &&
|
tree.sym.kind == Kinds.VAR &&
|
||||||
!isParameter(tree.sym)) {
|
!isParameter(tree.sym)) {
|
||||||
String docComment = env.toplevel.docComments.get(tree);
|
String docComment = TreeInfo.getCommentText(env, tree);
|
||||||
Position.LineMap lineMap = env.toplevel.lineMap;
|
Position.LineMap lineMap = env.toplevel.lineMap;
|
||||||
docenv.makeFieldDoc(tree.sym, docComment, tree, lineMap);
|
docenv.makeFieldDoc(tree.sym, docComment, tree, lineMap);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -33,9 +33,9 @@ import java.net.URI;
|
|||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
import javax.tools.SimpleJavaFileObject;
|
import javax.tools.SimpleJavaFileObject;
|
||||||
import com.sun.tools.javac.file.JavacFileManager;
|
import com.sun.tools.javac.file.JavacFileManager;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
|
||||||
import com.sun.tools.javac.parser.Parser;
|
import com.sun.tools.javac.parser.Parser;
|
||||||
import com.sun.tools.javac.parser.ParserFactory;
|
import com.sun.tools.javac.parser.ParserFactory;
|
||||||
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
import com.sun.tools.javac.tree.TreeScanner;
|
import com.sun.tools.javac.tree.TreeScanner;
|
||||||
import com.sun.tools.javac.util.Context;
|
import com.sun.tools.javac.util.Context;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -68,7 +68,7 @@ import com.sun.source.util.TaskListener;
|
|||||||
import com.sun.tools.javac.api.JavacTool;
|
import com.sun.tools.javac.api.JavacTool;
|
||||||
import com.sun.tools.javac.code.Symbol;
|
import com.sun.tools.javac.code.Symbol;
|
||||||
import com.sun.tools.javac.code.Type;
|
import com.sun.tools.javac.code.Type;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCImport;
|
import com.sun.tools.javac.tree.JCTree.JCImport;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 7073631 7159445
|
* @bug 7073631 7159445 7156633
|
||||||
* @summary tests error and diagnostics positions
|
* @summary tests error and diagnostics positions
|
||||||
* @author Jan Lahoda
|
* @author Jan Lahoda
|
||||||
*/
|
*/
|
||||||
@ -49,11 +49,17 @@ import com.sun.source.util.Trees;
|
|||||||
import com.sun.tools.javac.api.JavacTaskImpl;
|
import com.sun.tools.javac.api.JavacTaskImpl;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import javax.tools.Diagnostic;
|
import javax.tools.Diagnostic;
|
||||||
import javax.tools.DiagnosticCollector;
|
import javax.tools.DiagnosticCollector;
|
||||||
import javax.tools.DiagnosticListener;
|
import javax.tools.DiagnosticListener;
|
||||||
@ -63,13 +69,15 @@ import javax.tools.SimpleJavaFileObject;
|
|||||||
import javax.tools.ToolProvider;
|
import javax.tools.ToolProvider;
|
||||||
|
|
||||||
public class JavacParserTest extends TestCase {
|
public class JavacParserTest extends TestCase {
|
||||||
final JavaCompiler tool;
|
static final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
|
||||||
public JavacParserTest(String testName) {
|
|
||||||
tool = ToolProvider.getSystemJavaCompiler();
|
private JavacParserTest(){}
|
||||||
System.out.println("java.home=" + System.getProperty("java.home"));
|
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
new JavacParserTest().run(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
static class MyFileObject extends SimpleJavaFileObject {
|
class MyFileObject extends SimpleJavaFileObject {
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
|
|
||||||
@ -86,11 +94,11 @@ public class JavacParserTest extends TestCase {
|
|||||||
/*
|
/*
|
||||||
* converts Windows to Unix style LFs for comparing strings
|
* converts Windows to Unix style LFs for comparing strings
|
||||||
*/
|
*/
|
||||||
private String normalize(String in) {
|
String normalize(String in) {
|
||||||
return in.replace(System.getProperty("line.separator"), "\n");
|
return in.replace(System.getProperty("line.separator"), "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompilationUnitTree getCompilationUnitTree(String code) throws IOException {
|
CompilationUnitTree getCompilationUnitTree(String code) throws IOException {
|
||||||
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
||||||
null, Arrays.asList(new MyFileObject(code)));
|
null, Arrays.asList(new MyFileObject(code)));
|
||||||
@ -98,7 +106,7 @@ public class JavacParserTest extends TestCase {
|
|||||||
return cut;
|
return cut;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getErroneousTreeValues(ErroneousTree node) {
|
List<String> getErroneousTreeValues(ErroneousTree node) {
|
||||||
|
|
||||||
List<String> values = new ArrayList<>();
|
List<String> values = new ArrayList<>();
|
||||||
if (node.getErrorTrees() != null) {
|
if (node.getErrorTrees() != null) {
|
||||||
@ -112,7 +120,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPositionForSuperConstructorCalls() throws IOException {
|
@Test
|
||||||
|
void testPositionForSuperConstructorCalls() throws IOException {
|
||||||
assert tool != null;
|
assert tool != null;
|
||||||
|
|
||||||
String code = "package test; public class Test {public Test() {super();}}";
|
String code = "package test; public class Test {public Test() {super();}}";
|
||||||
@ -149,12 +158,12 @@ public class JavacParserTest extends TestCase {
|
|||||||
methodStartPos, pos.getStartPosition(cut, mit.getMethodSelect()));
|
methodStartPos, pos.getStartPosition(cut, mit.getMethodSelect()));
|
||||||
assertEquals("testPositionForSuperConstructorCalls",
|
assertEquals("testPositionForSuperConstructorCalls",
|
||||||
methodEndPos, pos.getEndPosition(cut, mit.getMethodSelect()));
|
methodEndPos, pos.getEndPosition(cut, mit.getMethodSelect()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPositionForEnumModifiers() throws IOException {
|
@Test
|
||||||
|
void testPositionForEnumModifiers() throws IOException {
|
||||||
String code = "package test; public enum Test {A;}";
|
final String theString = "public";
|
||||||
|
String code = "package test; " + theString + " enum Test {A;}";
|
||||||
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
||||||
null, Arrays.asList(new MyFileObject(code)));
|
null, Arrays.asList(new MyFileObject(code)));
|
||||||
@ -163,19 +172,21 @@ public class JavacParserTest extends TestCase {
|
|||||||
|
|
||||||
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
||||||
ModifiersTree mt = clazz.getModifiers();
|
ModifiersTree mt = clazz.getModifiers();
|
||||||
|
int spos = code.indexOf(theString);
|
||||||
|
int epos = spos + theString.length();
|
||||||
assertEquals("testPositionForEnumModifiers",
|
assertEquals("testPositionForEnumModifiers",
|
||||||
38 - 24, pos.getStartPosition(cut, mt));
|
spos, pos.getStartPosition(cut, mt));
|
||||||
assertEquals("testPositionForEnumModifiers",
|
assertEquals("testPositionForEnumModifiers",
|
||||||
44 - 24, pos.getEndPosition(cut, mt));
|
epos, pos.getEndPosition(cut, mt));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNewClassWithEnclosing() throws IOException {
|
@Test
|
||||||
|
void testNewClassWithEnclosing() throws IOException {
|
||||||
|
|
||||||
|
final String theString = "Test.this.new d()";
|
||||||
String code = "package test; class Test { " +
|
String code = "package test; class Test { " +
|
||||||
"class d {} private void method() { " +
|
"class d {} private void method() { " +
|
||||||
"Object o = Test.this.new d(); } }";
|
"Object o = " + theString + "; } }";
|
||||||
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
||||||
null, Arrays.asList(new MyFileObject(code)));
|
null, Arrays.asList(new MyFileObject(code)));
|
||||||
@ -186,13 +197,16 @@ public class JavacParserTest extends TestCase {
|
|||||||
ExpressionTree est =
|
ExpressionTree est =
|
||||||
((VariableTree) ((MethodTree) clazz.getMembers().get(1)).getBody().getStatements().get(0)).getInitializer();
|
((VariableTree) ((MethodTree) clazz.getMembers().get(1)).getBody().getStatements().get(0)).getInitializer();
|
||||||
|
|
||||||
|
final int spos = code.indexOf(theString);
|
||||||
|
final int epos = spos + theString.length();
|
||||||
assertEquals("testNewClassWithEnclosing",
|
assertEquals("testNewClassWithEnclosing",
|
||||||
97 - 24, pos.getStartPosition(cut, est));
|
spos, pos.getStartPosition(cut, est));
|
||||||
assertEquals("testNewClassWithEnclosing",
|
assertEquals("testNewClassWithEnclosing",
|
||||||
114 - 24, pos.getEndPosition(cut, est));
|
epos, pos.getEndPosition(cut, est));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPreferredPositionForBinaryOp() throws IOException {
|
@Test
|
||||||
|
void testPreferredPositionForBinaryOp() throws IOException {
|
||||||
|
|
||||||
String code = "package test; public class Test {"
|
String code = "package test; public class Test {"
|
||||||
+ "private void test() {"
|
+ "private void test() {"
|
||||||
@ -211,87 +225,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
condStartPos, condJC.pos);
|
condStartPos, condJC.pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPositionBrokenSource126732a() throws IOException {
|
@Test
|
||||||
String[] commands = new String[]{
|
void testErrorRecoveryForEnhancedForLoop142381() throws IOException {
|
||||||
"return Runnable()",
|
|
||||||
"do { } while (true)",
|
|
||||||
"throw UnsupportedOperationException()",
|
|
||||||
"assert true",
|
|
||||||
"1 + 1",};
|
|
||||||
|
|
||||||
for (String command : commands) {
|
|
||||||
|
|
||||||
String code = "package test;\n"
|
|
||||||
+ "public class Test {\n"
|
|
||||||
+ " public static void test() {\n"
|
|
||||||
+ " " + command + " {\n"
|
|
||||||
+ " new Runnable() {\n"
|
|
||||||
+ " };\n"
|
|
||||||
+ " }\n"
|
|
||||||
+ "}";
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null,
|
|
||||||
null, null, Arrays.asList(new MyFileObject(code)));
|
|
||||||
CompilationUnitTree cut = ct.parse().iterator().next();
|
|
||||||
|
|
||||||
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
|
||||||
MethodTree method = (MethodTree) clazz.getMembers().get(0);
|
|
||||||
List<? extends StatementTree> statements =
|
|
||||||
method.getBody().getStatements();
|
|
||||||
|
|
||||||
StatementTree ret = statements.get(0);
|
|
||||||
StatementTree block = statements.get(1);
|
|
||||||
|
|
||||||
Trees t = Trees.instance(ct);
|
|
||||||
int len = code.indexOf(command + " {") + (command + " ").length();
|
|
||||||
assertEquals(command, len,
|
|
||||||
t.getSourcePositions().getEndPosition(cut, ret));
|
|
||||||
assertEquals(command, len,
|
|
||||||
t.getSourcePositions().getStartPosition(cut, block));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPositionBrokenSource126732b() throws IOException {
|
|
||||||
String[] commands = new String[]{
|
|
||||||
"break",
|
|
||||||
"break A",
|
|
||||||
"continue ",
|
|
||||||
"continue A",};
|
|
||||||
|
|
||||||
for (String command : commands) {
|
|
||||||
|
|
||||||
String code = "package test;\n"
|
|
||||||
+ "public class Test {\n"
|
|
||||||
+ " public static void test() {\n"
|
|
||||||
+ " while (true) {\n"
|
|
||||||
+ " " + command + " {\n"
|
|
||||||
+ " new Runnable() {\n"
|
|
||||||
+ " };\n"
|
|
||||||
+ " }\n"
|
|
||||||
+ " }\n"
|
|
||||||
+ "}";
|
|
||||||
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null,
|
|
||||||
null, null, Arrays.asList(new MyFileObject(code)));
|
|
||||||
CompilationUnitTree cut = ct.parse().iterator().next();
|
|
||||||
|
|
||||||
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
|
||||||
MethodTree method = (MethodTree) clazz.getMembers().get(0);
|
|
||||||
List<? extends StatementTree> statements =
|
|
||||||
((BlockTree) ((WhileLoopTree) method.getBody().getStatements().get(0)).getStatement()).getStatements();
|
|
||||||
|
|
||||||
StatementTree ret = statements.get(0);
|
|
||||||
StatementTree block = statements.get(1);
|
|
||||||
|
|
||||||
Trees t = Trees.instance(ct);
|
|
||||||
int len = code.indexOf(command + " {") + (command + " ").length();
|
|
||||||
assertEquals(command, len,
|
|
||||||
t.getSourcePositions().getEndPosition(cut, ret));
|
|
||||||
assertEquals(command, len,
|
|
||||||
t.getSourcePositions().getStartPosition(cut, block));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testErrorRecoveryForEnhancedForLoop142381() throws IOException {
|
|
||||||
|
|
||||||
String code = "package test; class Test { " +
|
String code = "package test; class Test { " +
|
||||||
"private void method() { " +
|
"private void method() { " +
|
||||||
@ -318,7 +253,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
assertFalse("testErrorRecoveryForEnhancedForLoop142381", errors.isEmpty());
|
assertFalse("testErrorRecoveryForEnhancedForLoop142381", errors.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPositionAnnotationNoPackage187551() throws IOException {
|
@Test
|
||||||
|
void testPositionAnnotationNoPackage187551() throws IOException {
|
||||||
|
|
||||||
String code = "\n@interface Test {}";
|
String code = "\n@interface Test {}";
|
||||||
|
|
||||||
@ -333,15 +269,24 @@ public class JavacParserTest extends TestCase {
|
|||||||
1, t.getSourcePositions().getStartPosition(cut, clazz));
|
1, t.getSourcePositions().getStartPosition(cut, clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPositionsSane() throws IOException {
|
@Test
|
||||||
|
void testPositionsSane1() throws IOException {
|
||||||
performPositionsSanityTest("package test; class Test { " +
|
performPositionsSanityTest("package test; class Test { " +
|
||||||
"private void method() { " +
|
"private void method() { " +
|
||||||
"java.util.List<? extends java.util.List<? extends String>> l; " +
|
"java.util.List<? extends java.util.List<? extends String>> l; " +
|
||||||
"} }");
|
"} }");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPositionsSane2() throws IOException {
|
||||||
performPositionsSanityTest("package test; class Test { " +
|
performPositionsSanityTest("package test; class Test { " +
|
||||||
"private void method() { " +
|
"private void method() { " +
|
||||||
"java.util.List<? super java.util.List<? super String>> l; " +
|
"java.util.List<? super java.util.List<? super String>> l; " +
|
||||||
"} }");
|
"} }");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPositionsSane3() throws IOException {
|
||||||
performPositionsSanityTest("package test; class Test { " +
|
performPositionsSanityTest("package test; class Test { " +
|
||||||
"private void method() { " +
|
"private void method() { " +
|
||||||
"java.util.List<? super java.util.List<?>> l; } }");
|
"java.util.List<? super java.util.List<?>> l; } }");
|
||||||
@ -409,7 +354,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}.scan(cut, null);
|
}.scan(cut, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCorrectWilcardPositions() throws IOException {
|
@Test
|
||||||
|
void testCorrectWilcardPositions1() throws IOException {
|
||||||
performWildcardPositionsTest("package test; import java.util.List; " +
|
performWildcardPositionsTest("package test; import java.util.List; " +
|
||||||
"class Test { private void method() { List<? extends List<? extends String>> l; } }",
|
"class Test { private void method() { List<? extends List<? extends String>> l; } }",
|
||||||
|
|
||||||
@ -421,9 +367,12 @@ public class JavacParserTest extends TestCase {
|
|||||||
"List",
|
"List",
|
||||||
"? extends String",
|
"? extends String",
|
||||||
"String"));
|
"String"));
|
||||||
performWildcardPositionsTest("package test; import java.util.List; " +
|
}
|
||||||
"class Test { private void method() { List<? super List<? super String>> l; } }",
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCorrectWilcardPositions2() throws IOException {
|
||||||
|
performWildcardPositionsTest("package test; import java.util.List; "
|
||||||
|
+ "class Test { private void method() { List<? super List<? super String>> l; } }",
|
||||||
Arrays.asList("List<? super List<? super String>> l;",
|
Arrays.asList("List<? super List<? super String>> l;",
|
||||||
"List<? super List<? super String>>",
|
"List<? super List<? super String>>",
|
||||||
"List",
|
"List",
|
||||||
@ -432,6 +381,10 @@ public class JavacParserTest extends TestCase {
|
|||||||
"List",
|
"List",
|
||||||
"? super String",
|
"? super String",
|
||||||
"String"));
|
"String"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCorrectWilcardPositions3() throws IOException {
|
||||||
performWildcardPositionsTest("package test; import java.util.List; " +
|
performWildcardPositionsTest("package test; import java.util.List; " +
|
||||||
"class Test { private void method() { List<? super List<?>> l; } }",
|
"class Test { private void method() { List<? super List<?>> l; } }",
|
||||||
|
|
||||||
@ -442,6 +395,10 @@ public class JavacParserTest extends TestCase {
|
|||||||
"List<?>",
|
"List<?>",
|
||||||
"List",
|
"List",
|
||||||
"?"));
|
"?"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCorrectWilcardPositions4() throws IOException {
|
||||||
performWildcardPositionsTest("package test; import java.util.List; " +
|
performWildcardPositionsTest("package test; import java.util.List; " +
|
||||||
"class Test { private void method() { " +
|
"class Test { private void method() { " +
|
||||||
"List<? extends List<? extends List<? extends String>>> l; } }",
|
"List<? extends List<? extends List<? extends String>>> l; } }",
|
||||||
@ -457,6 +414,10 @@ public class JavacParserTest extends TestCase {
|
|||||||
"List",
|
"List",
|
||||||
"? extends String",
|
"? extends String",
|
||||||
"String"));
|
"String"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCorrectWilcardPositions5() throws IOException {
|
||||||
performWildcardPositionsTest("package test; import java.util.List; " +
|
performWildcardPositionsTest("package test; import java.util.List; " +
|
||||||
"class Test { private void method() { " +
|
"class Test { private void method() { " +
|
||||||
"List<? extends List<? extends List<? extends String >>> l; } }",
|
"List<? extends List<? extends List<? extends String >>> l; } }",
|
||||||
@ -473,7 +434,7 @@ public class JavacParserTest extends TestCase {
|
|||||||
"String"));
|
"String"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void performWildcardPositionsTest(final String code,
|
void performWildcardPositionsTest(final String code,
|
||||||
List<String> golden) throws IOException {
|
List<String> golden) throws IOException {
|
||||||
|
|
||||||
final List<Diagnostic<? extends JavaFileObject>> errors =
|
final List<Diagnostic<? extends JavaFileObject>> errors =
|
||||||
@ -513,7 +474,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
content.toString());
|
content.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStartPositionForMethodWithoutModifiers() throws IOException {
|
@Test
|
||||||
|
void testStartPositionForMethodWithoutModifiers() throws IOException {
|
||||||
|
|
||||||
String code = "package t; class Test { <T> void t() {} }";
|
String code = "package t; class Test { <T> void t() {} }";
|
||||||
|
|
||||||
@ -530,23 +492,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
"<T> void t() {}", code.substring(start, end));
|
"<T> void t() {}", code.substring(start, end));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStartPositionEnumConstantInit() throws IOException {
|
@Test
|
||||||
|
void testVariableInIfThen1() throws IOException {
|
||||||
String code = "package t; enum Test { AAA; }";
|
|
||||||
|
|
||||||
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
|
||||||
null, Arrays.asList(new MyFileObject(code)));
|
|
||||||
CompilationUnitTree cut = ct.parse().iterator().next();
|
|
||||||
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
|
||||||
VariableTree enumAAA = (VariableTree) clazz.getMembers().get(0);
|
|
||||||
Trees t = Trees.instance(ct);
|
|
||||||
int start = (int) t.getSourcePositions().getStartPosition(cut,
|
|
||||||
enumAAA.getInitializer());
|
|
||||||
|
|
||||||
assertEquals("testStartPositionEnumConstantInit", -1, start);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testVariableInIfThen1() throws IOException {
|
|
||||||
|
|
||||||
String code = "package t; class Test { " +
|
String code = "package t; class Test { " +
|
||||||
"private static void t(String name) { " +
|
"private static void t(String name) { " +
|
||||||
@ -571,7 +518,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
codes);
|
codes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVariableInIfThen2() throws IOException {
|
@Test
|
||||||
|
void testVariableInIfThen2() throws IOException {
|
||||||
|
|
||||||
String code = "package t; class Test { " +
|
String code = "package t; class Test { " +
|
||||||
"private static void t(String name) { " +
|
"private static void t(String name) { " +
|
||||||
@ -593,7 +541,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVariableInIfThen3() throws IOException {
|
@Test
|
||||||
|
void testVariableInIfThen3() throws IOException {
|
||||||
|
|
||||||
String code = "package t; class Test { "+
|
String code = "package t; class Test { "+
|
||||||
"private static void t() { " +
|
"private static void t() { " +
|
||||||
@ -615,7 +564,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVariableInIfThen4() throws IOException {
|
@Test
|
||||||
|
void testVariableInIfThen4() throws IOException {
|
||||||
|
|
||||||
String code = "package t; class Test { "+
|
String code = "package t; class Test { "+
|
||||||
"private static void t(String name) { " +
|
"private static void t(String name) { " +
|
||||||
@ -637,7 +587,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
Arrays.<String>asList("compiler.err.class.not.allowed"), codes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVariableInIfThen5() throws IOException {
|
@Test
|
||||||
|
void testVariableInIfThen5() throws IOException {
|
||||||
|
|
||||||
String code = "package t; class Test { "+
|
String code = "package t; class Test { "+
|
||||||
"private static void t() { " +
|
"private static void t() { " +
|
||||||
@ -661,7 +612,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// see javac bug #6882235, NB bug #98234:
|
// see javac bug #6882235, NB bug #98234:
|
||||||
public void testMissingExponent() throws IOException {
|
@Test
|
||||||
|
void testMissingExponent() throws IOException {
|
||||||
|
|
||||||
String code = "\nclass Test { { System.err.println(0e); } }";
|
String code = "\nclass Test { { System.err.println(0e); } }";
|
||||||
|
|
||||||
@ -671,7 +623,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
assertNotNull(ct.parse().iterator().next());
|
assertNotNull(ct.parse().iterator().next());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testTryResourcePos() throws IOException {
|
@Test
|
||||||
|
void testTryResourcePos() throws IOException {
|
||||||
|
|
||||||
final String code = "package t; class Test { " +
|
final String code = "package t; class Test { " +
|
||||||
"{ try (java.io.InputStream in = null) { } } }";
|
"{ try (java.io.InputStream in = null) { } } }";
|
||||||
@ -683,7 +636,6 @@ public class JavacParserTest extends TestCase {
|
|||||||
public Void visitVariable(VariableTree node, Void p) {
|
public Void visitVariable(VariableTree node, Void p) {
|
||||||
if ("in".contentEquals(node.getName())) {
|
if ("in".contentEquals(node.getName())) {
|
||||||
JCTree.JCVariableDecl var = (JCTree.JCVariableDecl) node;
|
JCTree.JCVariableDecl var = (JCTree.JCVariableDecl) node;
|
||||||
System.out.println(node.getName() + "," + var.pos);
|
|
||||||
assertEquals("testTryResourcePos", "in = null) { } } }",
|
assertEquals("testTryResourcePos", "in = null) { } } }",
|
||||||
code.substring(var.pos));
|
code.substring(var.pos));
|
||||||
}
|
}
|
||||||
@ -692,7 +644,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}.scan(cut, null);
|
}.scan(cut, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVarPos() throws IOException {
|
@Test
|
||||||
|
void testVarPos() throws IOException {
|
||||||
|
|
||||||
final String code = "package t; class Test { " +
|
final String code = "package t; class Test { " +
|
||||||
"{ java.io.InputStream in = null; } }";
|
"{ java.io.InputStream in = null; } }";
|
||||||
@ -714,7 +667,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expected erroneous tree: int x = y;(ERROR);
|
// expected erroneous tree: int x = y;(ERROR);
|
||||||
public void testOperatorMissingError() throws IOException {
|
@Test
|
||||||
|
void testOperatorMissingError() throws IOException {
|
||||||
|
|
||||||
String code = "package test; public class ErrorTest { "
|
String code = "package test; public class ErrorTest { "
|
||||||
+ "void method() { int x = y z } }";
|
+ "void method() { int x = y z } }";
|
||||||
@ -724,10 +678,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
new ArrayList<>(Arrays.asList("[z]"));
|
new ArrayList<>(Arrays.asList("[z]"));
|
||||||
|
|
||||||
new TreeScanner<Void, Void>() {
|
new TreeScanner<Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitErroneous(ErroneousTree node, Void p) {
|
public Void visitErroneous(ErroneousTree node, Void p) {
|
||||||
|
|
||||||
values.add(getErroneousTreeValues(node).toString());
|
values.add(getErroneousTreeValues(node).toString());
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@ -741,7 +693,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expected erroneous tree: String s = (ERROR);
|
// expected erroneous tree: String s = (ERROR);
|
||||||
public void testMissingParenthesisError() throws IOException {
|
@Test
|
||||||
|
void testMissingParenthesisError() throws IOException {
|
||||||
|
|
||||||
String code = "package test; public class ErrorTest { "
|
String code = "package test; public class ErrorTest { "
|
||||||
+ "void f() {String s = new String; } }";
|
+ "void f() {String s = new String; } }";
|
||||||
@ -751,10 +704,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
new ArrayList<>(Arrays.asList("[new String()]"));
|
new ArrayList<>(Arrays.asList("[new String()]"));
|
||||||
|
|
||||||
new TreeScanner<Void, Void>() {
|
new TreeScanner<Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitErroneous(ErroneousTree node, Void p) {
|
public Void visitErroneous(ErroneousTree node, Void p) {
|
||||||
|
|
||||||
values.add(getErroneousTreeValues(node).toString());
|
values.add(getErroneousTreeValues(node).toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -767,7 +718,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expected erroneous tree: package test; (ERROR)(ERROR)
|
// expected erroneous tree: package test; (ERROR)(ERROR)
|
||||||
public void testMissingClassError() throws IOException {
|
@Test
|
||||||
|
void testMissingClassError() throws IOException {
|
||||||
|
|
||||||
String code = "package Test; clas ErrorTest { "
|
String code = "package Test; clas ErrorTest { "
|
||||||
+ "void f() {String s = new String(); } }";
|
+ "void f() {String s = new String(); } }";
|
||||||
@ -777,10 +729,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
new ArrayList<>(Arrays.asList("[, clas]", "[]"));
|
new ArrayList<>(Arrays.asList("[, clas]", "[]"));
|
||||||
|
|
||||||
new TreeScanner<Void, Void>() {
|
new TreeScanner<Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitErroneous(ErroneousTree node, Void p) {
|
public Void visitErroneous(ErroneousTree node, Void p) {
|
||||||
|
|
||||||
values.add(getErroneousTreeValues(node).toString());
|
values.add(getErroneousTreeValues(node).toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -793,7 +743,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expected erroneous tree: void m1(int i) {(ERROR);{(ERROR);}
|
// expected erroneous tree: void m1(int i) {(ERROR);{(ERROR);}
|
||||||
public void testSwitchError() throws IOException {
|
@Test
|
||||||
|
void testSwitchError() throws IOException {
|
||||||
|
|
||||||
String code = "package test; public class ErrorTest { "
|
String code = "package test; public class ErrorTest { "
|
||||||
+ "int numDays; void m1(int i) { switchh {i} { case 1: "
|
+ "int numDays; void m1(int i) { switchh {i} { case 1: "
|
||||||
@ -804,10 +755,8 @@ public class JavacParserTest extends TestCase {
|
|||||||
new ArrayList<>(Arrays.asList("[switchh]", "[i]"));
|
new ArrayList<>(Arrays.asList("[switchh]", "[i]"));
|
||||||
|
|
||||||
new TreeScanner<Void, Void>() {
|
new TreeScanner<Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitErroneous(ErroneousTree node, Void p) {
|
public Void visitErroneous(ErroneousTree node, Void p) {
|
||||||
|
|
||||||
values.add(getErroneousTreeValues(node).toString());
|
values.add(getErroneousTreeValues(node).toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -820,20 +769,20 @@ public class JavacParserTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expected erroneous tree: class ErrorTest {(ERROR)
|
// expected erroneous tree: class ErrorTest {(ERROR)
|
||||||
public void testMethodError() throws IOException {
|
@Test
|
||||||
|
void testMethodError() throws IOException {
|
||||||
|
|
||||||
String code = "package Test; class ErrorTest { "
|
String code = "package Test; class ErrorTest { "
|
||||||
+ "static final void f) {String s = new String(); } }";
|
+ "static final void f) {String s = new String(); } }";
|
||||||
CompilationUnitTree cut = getCompilationUnitTree(code);
|
CompilationUnitTree cut = cut = getCompilationUnitTree(code);
|
||||||
|
|
||||||
final List<String> values = new ArrayList<>();
|
final List<String> values = new ArrayList<>();
|
||||||
final List<String> expectedValues =
|
final List<String> expectedValues =
|
||||||
new ArrayList<>(Arrays.asList("[\nstatic final void f();]"));
|
new ArrayList<>(Arrays.asList("[\nstatic final void f();]"));
|
||||||
|
|
||||||
new TreeScanner<Void, Void>() {
|
new TreeScanner<Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitErroneous(ErroneousTree node, Void p) {
|
public Void visitErroneous(ErroneousTree node, Void p) {
|
||||||
|
|
||||||
values.add(normalize(getErroneousTreeValues(node).toString()));
|
values.add(normalize(getErroneousTreeValues(node).toString()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -845,43 +794,135 @@ public class JavacParserTest extends TestCase {
|
|||||||
+ expectedValues, values, expectedValues);
|
+ expectedValues, values, expectedValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
void testsNotWorking() throws IOException {
|
/*
|
||||||
|
* The following tests do not work just yet with nb-javac nor javac,
|
||||||
|
* they need further investigation, see CR: 7167356
|
||||||
|
*/
|
||||||
|
|
||||||
// Fails with nb-javac, needs further investigation
|
void testPositionBrokenSource126732a() throws IOException {
|
||||||
testPositionBrokenSource126732a();
|
String[] commands = new String[]{
|
||||||
testPositionBrokenSource126732b();
|
"return Runnable()",
|
||||||
|
"do { } while (true)",
|
||||||
|
"throw UnsupportedOperationException()",
|
||||||
|
"assert true",
|
||||||
|
"1 + 1",};
|
||||||
|
|
||||||
// Fails, these tests yet to be addressed
|
for (String command : commands) {
|
||||||
testPositionForEnumModifiers();
|
|
||||||
testStartPositionEnumConstantInit();
|
String code = "package test;\n"
|
||||||
|
+ "public class Test {\n"
|
||||||
|
+ " public static void test() {\n"
|
||||||
|
+ " " + command + " {\n"
|
||||||
|
+ " new Runnable() {\n"
|
||||||
|
+ " };\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ "}";
|
||||||
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null,
|
||||||
|
null, null, Arrays.asList(new MyFileObject(code)));
|
||||||
|
CompilationUnitTree cut = ct.parse().iterator().next();
|
||||||
|
|
||||||
|
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
||||||
|
MethodTree method = (MethodTree) clazz.getMembers().get(0);
|
||||||
|
List<? extends StatementTree> statements =
|
||||||
|
method.getBody().getStatements();
|
||||||
|
|
||||||
|
StatementTree ret = statements.get(0);
|
||||||
|
StatementTree block = statements.get(1);
|
||||||
|
|
||||||
|
Trees t = Trees.instance(ct);
|
||||||
|
int len = code.indexOf(command + " {") + (command + " ").length();
|
||||||
|
assertEquals(command, len,
|
||||||
|
t.getSourcePositions().getEndPosition(cut, ret));
|
||||||
|
assertEquals(command, len,
|
||||||
|
t.getSourcePositions().getStartPosition(cut, block));
|
||||||
}
|
}
|
||||||
void testPositions() throws IOException {
|
|
||||||
testPositionsSane();
|
|
||||||
testCorrectWilcardPositions();
|
|
||||||
testPositionAnnotationNoPackage187551();
|
|
||||||
testPositionForSuperConstructorCalls();
|
|
||||||
testPreferredPositionForBinaryOp();
|
|
||||||
testStartPositionForMethodWithoutModifiers();
|
|
||||||
testVarPos();
|
|
||||||
testVariableInIfThen1();
|
|
||||||
testVariableInIfThen2();
|
|
||||||
testVariableInIfThen3();
|
|
||||||
testVariableInIfThen4();
|
|
||||||
testVariableInIfThen5();
|
|
||||||
testMissingExponent();
|
|
||||||
testTryResourcePos();
|
|
||||||
testOperatorMissingError();
|
|
||||||
testMissingParenthesisError();
|
|
||||||
testMissingClassError();
|
|
||||||
testSwitchError();
|
|
||||||
testMethodError();
|
|
||||||
testErrorRecoveryForEnhancedForLoop142381();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String... args) throws IOException {
|
void testPositionBrokenSource126732b() throws IOException {
|
||||||
JavacParserTest jpt = new JavacParserTest("JavacParserTest");
|
String[] commands = new String[]{
|
||||||
jpt.testPositions();
|
"break",
|
||||||
System.out.println("PASS");
|
"break A",
|
||||||
|
"continue ",
|
||||||
|
"continue A",};
|
||||||
|
|
||||||
|
for (String command : commands) {
|
||||||
|
|
||||||
|
String code = "package test;\n"
|
||||||
|
+ "public class Test {\n"
|
||||||
|
+ " public static void test() {\n"
|
||||||
|
+ " while (true) {\n"
|
||||||
|
+ " " + command + " {\n"
|
||||||
|
+ " new Runnable() {\n"
|
||||||
|
+ " };\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null,
|
||||||
|
null, null, Arrays.asList(new MyFileObject(code)));
|
||||||
|
CompilationUnitTree cut = ct.parse().iterator().next();
|
||||||
|
|
||||||
|
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
||||||
|
MethodTree method = (MethodTree) clazz.getMembers().get(0);
|
||||||
|
List<? extends StatementTree> statements =
|
||||||
|
((BlockTree) ((WhileLoopTree) method.getBody().getStatements().get(0)).getStatement()).getStatements();
|
||||||
|
|
||||||
|
StatementTree ret = statements.get(0);
|
||||||
|
StatementTree block = statements.get(1);
|
||||||
|
|
||||||
|
Trees t = Trees.instance(ct);
|
||||||
|
int len = code.indexOf(command + " {") + (command + " ").length();
|
||||||
|
assertEquals(command, len,
|
||||||
|
t.getSourcePositions().getEndPosition(cut, ret));
|
||||||
|
assertEquals(command, len,
|
||||||
|
t.getSourcePositions().getStartPosition(cut, block));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void testStartPositionEnumConstantInit() throws IOException {
|
||||||
|
|
||||||
|
String code = "package t; enum Test { AAA; }";
|
||||||
|
|
||||||
|
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
|
||||||
|
null, Arrays.asList(new MyFileObject(code)));
|
||||||
|
CompilationUnitTree cut = ct.parse().iterator().next();
|
||||||
|
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
|
||||||
|
VariableTree enumAAA = (VariableTree) clazz.getMembers().get(0);
|
||||||
|
Trees t = Trees.instance(ct);
|
||||||
|
int start = (int) t.getSourcePositions().getStartPosition(cut,
|
||||||
|
enumAAA.getInitializer());
|
||||||
|
|
||||||
|
assertEquals("testStartPositionEnumConstantInit", -1, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
void run(String[] args) throws Exception {
|
||||||
|
int passed = 0, failed = 0;
|
||||||
|
final Pattern p = (args != null && args.length > 0)
|
||||||
|
? Pattern.compile(args[0])
|
||||||
|
: null;
|
||||||
|
for (Method m : this.getClass().getDeclaredMethods()) {
|
||||||
|
boolean selected = (p == null)
|
||||||
|
? m.isAnnotationPresent(Test.class)
|
||||||
|
: p.matcher(m.getName()).matches();
|
||||||
|
if (selected) {
|
||||||
|
try {
|
||||||
|
m.invoke(this, (Object[]) null);
|
||||||
|
System.out.println(m.getName() + ": OK");
|
||||||
|
passed++;
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
System.out.printf("Test %s failed: %s %n", m, ex.getCause());
|
||||||
|
failed++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
|
||||||
|
if (failed > 0) {
|
||||||
|
throw new RuntimeException("Tests failed: " + failed);
|
||||||
|
}
|
||||||
|
if (passed == 0 && failed == 0) {
|
||||||
|
throw new AssertionError("No test(s) selected: passed = " +
|
||||||
|
passed + ", failed = " + failed + " ??????????");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -906,8 +947,6 @@ abstract class TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void assertEquals(String message, Object o1, Object o2) {
|
void assertEquals(String message, Object o1, Object o2) {
|
||||||
System.out.println(o1);
|
|
||||||
System.out.println(o2);
|
|
||||||
if (o1 != null && o2 != null && !o1.equals(o2)) {
|
if (o1 != null && o2 != null && !o1.equals(o2)) {
|
||||||
fail(message);
|
fail(message);
|
||||||
}
|
}
|
||||||
@ -929,4 +968,11 @@ abstract class TestCase {
|
|||||||
void fail(String message) {
|
void fail(String message) {
|
||||||
throw new RuntimeException(message);
|
throw new RuntimeException(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that the annotated method is a test method.
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
public @interface Test {}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
import com.sun.source.tree.*;
|
import com.sun.source.tree.*;
|
||||||
import com.sun.source.util.*;
|
import com.sun.source.util.*;
|
||||||
|
import com.sun.tools.javac.tree.DocCommentTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@ -137,16 +138,16 @@ public class DocCommentToplevelTest {
|
|||||||
|
|
||||||
new TreeScanner<ClassTree,Void>() {
|
new TreeScanner<ClassTree,Void>() {
|
||||||
|
|
||||||
Map<JCTree, String> docComments;
|
DocCommentTable docComments;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassTree visitCompilationUnit(CompilationUnitTree node, Void unused) {
|
public ClassTree visitCompilationUnit(CompilationUnitTree node, Void unused) {
|
||||||
docComments = ((JCTree.JCCompilationUnit)node).docComments;
|
docComments = ((JCTree.JCCompilationUnit)node).docComments;
|
||||||
boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
|
boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
|
||||||
(pk != PackageKind.NO_PKG || ik != ImportKind.ZERO);
|
(pk != PackageKind.NO_PKG || ik != ImportKind.ZERO);
|
||||||
boolean foundComment = docComments.get(node) != null;
|
boolean foundComment = docComments.hasComment((JCTree) node);
|
||||||
if (expectedComment != foundComment) {
|
if (expectedComment != foundComment) {
|
||||||
error("Unexpected comment " + docComments.get(node) + " on toplevel");
|
error("Unexpected comment " + docComments.getComment((JCTree) node) + " on toplevel");
|
||||||
}
|
}
|
||||||
return super.visitCompilationUnit(node, null);
|
return super.visitCompilationUnit(node, null);
|
||||||
}
|
}
|
||||||
@ -156,9 +157,9 @@ public class DocCommentToplevelTest {
|
|||||||
boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
|
boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
|
||||||
pk == PackageKind.NO_PKG && ik == ImportKind.ZERO &&
|
pk == PackageKind.NO_PKG && ik == ImportKind.ZERO &&
|
||||||
node.getSimpleName().toString().equals("First");
|
node.getSimpleName().toString().equals("First");
|
||||||
boolean foundComment = docComments.get(node) != null;
|
boolean foundComment = docComments.hasComment((JCTree) node);
|
||||||
if (expectedComment != foundComment) {
|
if (expectedComment != foundComment) {
|
||||||
error("Unexpected comment " + docComments.get(node) + " on class " + node.getSimpleName());
|
error("Unexpected comment " + docComments.getComment((JCTree) node) + " on class " + node.getSimpleName());
|
||||||
}
|
}
|
||||||
return super.visitClass(node, unused);
|
return super.visitClass(node, unused);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -73,7 +73,7 @@ import com.sun.source.tree.CompilationUnitTree;
|
|||||||
import com.sun.source.util.JavacTask;
|
import com.sun.source.util.JavacTask;
|
||||||
import com.sun.tools.javac.api.JavacTool;
|
import com.sun.tools.javac.api.JavacTool;
|
||||||
import com.sun.tools.javac.code.Flags;
|
import com.sun.tools.javac.code.Flags;
|
||||||
import com.sun.tools.javac.parser.EndPosTable;
|
import com.sun.tools.javac.tree.EndPosTable;
|
||||||
import com.sun.tools.javac.tree.JCTree;
|
import com.sun.tools.javac.tree.JCTree;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCNewClass;
|
import com.sun.tools.javac.tree.JCTree.JCNewClass;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user