下面列出了com.sun.source.tree.ExpressionTree#toString ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static String className(TreePath path) {
ClassTree ct = (ClassTree) path.getLeaf();
if (path.getParentPath().getLeaf().getKind() == Kind.NEW_CLASS) {
NewClassTree nct = (NewClassTree) path.getParentPath().getLeaf();
if (nct.getClassBody() == ct) {
return simpleName(nct.getIdentifier());
}
} else if (path.getParentPath().getLeaf() == path.getCompilationUnit()) {
ExpressionTree pkg = path.getCompilationUnit().getPackageName();
String pkgName = pkg != null ? pkg.toString() : null;
if (pkgName != null && !pkgName.contentEquals(ERR_NAME)) {
return pkgName + '.' + ct.getSimpleName().toString();
}
}
return ct.getSimpleName().toString();
}
private boolean isTypeExcluded( JCTree.JCClassDecl classDef, CompilationUnitTree compilationUnit )
{
if( _processorGates.isEmpty() )
{
return false;
}
ExpressionTree pkgName = compilationUnit.getPackageName();
if( pkgName == null )
{
return false;
}
String simpleName = classDef.name.toString();
String fqn = pkgName.toString() + '.' + simpleName;
return _processorGates.stream().anyMatch( gate -> gate.exclude( fqn ) );
}
private void addInputFile( TaskEvent e )
{
if( !_initialized )
{
CompilationUnitTree compilationUnit = e.getCompilationUnit();
ExpressionTree pkg = compilationUnit.getPackageName();
String packageQualifier = pkg == null ? "" : (pkg.toString() + '.');
for( Tree classDecl : compilationUnit.getTypeDecls() )
{
if( classDecl instanceof JCTree.JCClassDecl )
{
_javaInputFiles.add( new Pair<>( packageQualifier + ((JCTree.JCClassDecl)classDecl).getSimpleName(), compilationUnit.getSourceFile() ) );
}
}
}
}
private static Context initImports(TreePath path) {
CompilationUnitTree topLevel = path.getCompilationUnit();
Context result = contextCache.get(topLevel);
if (result != null) {
return result;
}
ExpressionTree packageTree = topLevel.getPackageName();
String packageName;
if (packageTree == null) {
packageName = ""; // the default package
} else {
packageName = packageTree.toString();
}
List<String> imports = new ArrayList<>();
for (ImportTree i : topLevel.getImports()) {
String imported = i.getQualifiedIdentifier().toString();
imports.add(imported);
}
result = new Context(packageName, imports);
contextCache.put(topLevel, result);
return result;
}
@Override
public boolean onEnteringCompilationUnit(CompilationUnitTree tree) {
ExpressionTree packageNameTree = tree.getPackageName();
// TODO deal with default package
if (packageNameTree == null) {
return false;
}
currentPackageName = packageNameTree.toString();
packagesOfCurrentCompilation.add(currentPackageName);
try {
currentComponent = declaredComponents.getComponentByPackage(currentPackageName);
}
catch (PackageAssignedToMultipleComponentsException e) {
log.report(
ReportingPolicy.ERROR,
DeptectiveMessages.PACKAGE_CONTAINED_IN_MULTIPLE_COMPONENTS,
String.join(
", ",
e.getMatchingComponents()
.stream()
.map(Component::getName)
.sorted()
.collect(Collectors.toList())
),
currentPackageName
);
createOutputFile = false;
return false;
}
if (currentComponent == null) {
builder.addContains(currentPackageName, PackagePattern.getPattern(currentPackageName));
}
return true;
}
@Override
public boolean onEnteringCompilationUnit(CompilationUnitTree tree) {
ExpressionTree packageNameTree = tree.getPackageName();
// TODO deal with default package
if (packageNameTree == null) {
return false;
}
String packageName = packageNameTree.toString();
currentPackageName = packageName;
try {
currentComponent = allowedPackageDependencies.getComponentByPackage(packageName);
if (currentComponent == null) {
reportUnconfiguredPackageIfNeeded(tree, packageName);
}
}
catch (PackageAssignedToMultipleComponentsException e) {
log.report(
ReportingPolicy.ERROR,
DeptectiveMessages.PACKAGE_CONTAINED_IN_MULTIPLE_COMPONENTS,
String.join(
", ",
e.getMatchingComponents()
.stream()
.map(Component::getName)
.sorted()
.collect(Collectors.toList())
),
packageName
);
createDotFile = false;
return false;
}
return true;
}
@Override
public boolean onEnteringCompilationUnit(CompilationUnitTree tree) {
ExpressionTree packageNameTree = tree.getPackageName();
// TODO deal with default package
if (packageNameTree == null) {
return false;
}
currentPackageName = packageNameTree.toString();
packagesOfCurrentCompilation.add(currentPackageName);
try {
currentComponent = declaredComponents.getComponentByPackage(currentPackageName);
}
catch (PackageAssignedToMultipleComponentsException e) {
log.report(
ReportingPolicy.ERROR,
DeptectiveMessages.PACKAGE_CONTAINED_IN_MULTIPLE_COMPONENTS,
String.join(
", ",
e.getMatchingComponents()
.stream()
.map(Component::getName)
.sorted()
.collect(Collectors.toList())
),
currentPackageName
);
createOutputFile = false;
return false;
}
if (currentComponent == null) {
builder.addContains(currentPackageName, PackagePattern.getPattern(currentPackageName));
}
return true;
}
@Override
public boolean onEnteringCompilationUnit(CompilationUnitTree tree) {
ExpressionTree packageNameTree = tree.getPackageName();
// TODO deal with default package
if (packageNameTree == null) {
return false;
}
String packageName = packageNameTree.toString();
currentPackageName = packageName;
try {
currentComponent = allowedPackageDependencies.getComponentByPackage(packageName);
if (currentComponent == null) {
reportUnconfiguredPackageIfNeeded(tree, packageName);
}
}
catch (PackageAssignedToMultipleComponentsException e) {
log.report(
ReportingPolicy.ERROR,
DeptectiveMessages.PACKAGE_CONTAINED_IN_MULTIPLE_COMPONENTS,
String.join(
", ",
e.getMatchingComponents()
.stream()
.map(Component::getName)
.sorted()
.collect(Collectors.toList())
),
packageName
);
createDotFile = false;
return false;
}
return true;
}
/**
* computes name of throws clause to work around
* <a href="http://www.netbeans.org/issues/show_bug.cgi?id=160414">issue 160414</a>.
*/
private static String resolveThrowsName(Element el, String fqn, ExpressionTree throwTree) {
boolean nestedClass = ElementKind.CLASS == el.getKind()
&& NestingKind.TOP_LEVEL != ((TypeElement) el).getNestingKind();
String insertName = nestedClass ? fqn : throwTree.toString();
return insertName;
}
private void process( TaskEvent e )
{
Set<String> typesToProcess = new HashSet<>();
ExpressionTree pkg = e.getCompilationUnit().getPackageName();
String packageQualifier = pkg == null ? "" : (pkg.toString() + '.');
for( Tree classDecl : e.getCompilationUnit().getTypeDecls() )
{
if( classDecl instanceof JCTree.JCClassDecl )
{
typesToProcess.add( packageQualifier + ((JCTree.JCClassDecl)classDecl).getSimpleName() );
insertBootstrap( (JCTree.JCClassDecl)classDecl );
}
}
_typeProcessor.addTypesToProcess( typesToProcess );
}
public static Tree getNode(CompilationUnitTree cut, ASTRecord rec) {
Map<Tree, ASTRecord> fwdIndex = ((ASTIndex) indexOf(cut)).back;
Map<ASTRecord, Tree> revIndex =
((BiMap<Tree, ASTRecord>) fwdIndex).inverse();
ExpressionTree et = cut.getPackageName();
String pkg = et == null ? "" : et.toString();
if (!pkg.isEmpty() && rec.className.indexOf('.') < 0) {
rec = new ASTRecord(cut, pkg + "." + rec.className,
rec.methodName, rec.varName, rec.astPath);
}
return revIndex.get(rec);
}
private static String getMemberName(ExpressionTree node) {
switch (node.getKind()) {
case IDENTIFIER:
return node.toString();
case MEMBER_SELECT:
return ((MemberSelectTree) node).getIdentifier().toString();
default:
return null;
}
}
private PackageDeclaration convertPackage(TreePath parent) {
ExpressionTree pkgName = unit.getPackageName();
PackageElement pkg =
pkgName != null
? env.elementUtilities().getPackageElement(pkgName.toString())
: env.defaultPackage();
PackageDeclaration newNode = null;
if (pkg == null) {
// Synthetic package, create from name.
pkg = new GeneratedPackageElement(pkgName != null ? pkgName.toString() : "");
newNode = new PackageDeclaration().setPackageElement(pkg);
newNode.setName(new SimpleName(pkg, null));
} else {
Tree node = trees.getTree(pkg);
newNode = new PackageDeclaration().setPackageElement(pkg);
for (AnnotationTree pkgAnnotation : unit.getPackageAnnotations()) {
newNode.addAnnotation((Annotation) convert(pkgAnnotation, parent));
}
if (unit.getSourceFile().toUri().getPath().endsWith("package-info.java")) {
if (node == null) {
// Java 8 javac bug, fixed in Java 9. Doc-comments in package-info.java
// sources are keyed to their compilation unit, not their package node.
node = unit;
}
newNode.setJavadoc((Javadoc) getAssociatedJavaDoc(node, getTreePath(parent, node)));
}
newNode.setName(newUnit.getEnv().elementUtil().getPackageName(pkg));
}
newNode.setPosition(SourcePosition.NO_POSITION);
return newNode;
}
private ImportVisitor (CompilationInfo info) {
this.info = info;
ExpressionTree pkg = info.getCompilationUnit().getPackageName();
currentPackage = pkg != null ? pkg.toString() : "";
imports = new ArrayList<TreePathHandle>();
}
@Override
public Void visitThrows(ThrowsTree tree, List<ErrorDescription> errors) {
boolean oldInheritDoc = foundInheritDoc;
ReferenceTree exName = tree.getExceptionName();
DocTreePath refPath = new DocTreePath(getCurrentPath(), tree.getExceptionName());
Element ex = javac.getDocTrees().getElement(refPath);
Types types = javac.getTypes();
Elements elements = javac.getElements();
final TypeElement throwableEl = elements.getTypeElement("java.lang.Throwable");
final TypeElement errorEl = elements.getTypeElement("java.lang.Error");
final TypeElement runtimeEl = elements.getTypeElement("java.lang.RuntimeException");
if(throwableEl == null || errorEl == null || runtimeEl == null) {
LOG.warning("Broken java-platform, cannot resolve " + throwableEl == null? "java.lang.Throwable" : errorEl == null? "java.lang.Error" : "java.lang.RuntimeException"); //NOI18N
return null;
}
TypeMirror throwable = throwableEl.asType();
TypeMirror error = errorEl.asType();
TypeMirror runtime = runtimeEl.asType();
DocTreePath currentDocPath = getCurrentPath();
DocTreePathHandle dtph = DocTreePathHandle.create(currentDocPath, javac);
if(dtph == null) {
return null;
}
DocSourcePositions sp = (DocSourcePositions) javac.getTrees().getSourcePositions();
int start = (int) sp.getStartPosition(javac.getCompilationUnit(), currentDocPath.getDocComment(), tree);
int end = (int) sp.getEndPosition(javac.getCompilationUnit(), currentDocPath.getDocComment(), tree);
if (ex == null || (ex.asType().getKind() == TypeKind.DECLARED
&& types.isAssignable(ex.asType(), throwable))) {
switch (currentElement.getKind()) {
case CONSTRUCTOR:
case METHOD:
if (ex == null || !(types.isAssignable(ex.asType(), error)
|| types.isAssignable(ex.asType(), runtime))) {
ExecutableElement ee = (ExecutableElement) currentElement;
String fqn;
if (ex != null) {
fqn = ((TypeElement) ex).getQualifiedName().toString();
} else {
ExpressionTree referenceClass = javac.getTreeUtilities().getReferenceClass(new DocTreePath(currentDocPath, exName));
if(referenceClass == null) break;
fqn = referenceClass.toString();
}
checkThrowsDeclared(tree, ex, fqn, ee.getThrownTypes(), dtph, start, end, errors);
}
break;
default:
// env.messages.error(REFERENCE, tree, "dc.invalid.throws");
}
} else {
// env.messages.error(REFERENCE, tree, "dc.invalid.throws");
}
warnIfEmpty(tree, tree.getDescription());
super.visitThrows(tree, errors);
foundInheritDoc = oldInheritDoc;
return null;
}
private List<Snippet> processExpression(String userSource, String compileSource) {
String name = null;
ExpressionInfo ei = ExpressionToTypeInfo.expressionInfo(compileSource, state);
ExpressionTree assignVar;
Wrap guts;
Snippet snip;
if (ei != null && ei.isNonVoid) {
String typeName = ei.typeName;
SubKind subkind;
if (ei.tree instanceof IdentifierTree) {
IdentifierTree id = (IdentifierTree) ei.tree;
name = id.getName().toString();
subkind = SubKind.VAR_VALUE_SUBKIND;
} else if (ei.tree instanceof AssignmentTree
&& (assignVar = ((AssignmentTree) ei.tree).getVariable()) instanceof IdentifierTree) {
name = assignVar.toString();
subkind = SubKind.ASSIGNMENT_SUBKIND;
} else {
subkind = SubKind.OTHER_EXPRESSION_SUBKIND;
}
if (shouldGenTempVar(subkind)) {
if (state.tempVariableNameGenerator != null) {
name = state.tempVariableNameGenerator.get();
}
while (name == null || state.keyMap.doesVariableNameExist(name)) {
name = "$" + ++varNumber;
}
guts = Wrap.tempVarWrap(compileSource, typeName, name);
Collection<String> declareReferences = null; //TODO
snip = new VarSnippet(state.keyMap.keyForVariable(name), userSource, guts,
name, SubKind.TEMP_VAR_EXPRESSION_SUBKIND, typeName, declareReferences, null);
} else {
guts = Wrap.methodReturnWrap(compileSource);
snip = new ExpressionSnippet(state.keyMap.keyForExpression(name, typeName), userSource, guts,
name, subkind);
}
} else {
guts = Wrap.methodWrap(compileSource);
if (ei == null) {
// We got no type info, check for not a statement by trying
AnalyzeTask at = trialCompile(guts);
if (at.getDiagnostics().hasNotStatement()) {
guts = Wrap.methodReturnWrap(compileSource);
at = trialCompile(guts);
}
if (at.hasErrors()) {
return compileFailResult(at, userSource, Kind.EXPRESSION);
}
}
snip = new StatementSnippet(state.keyMap.keyForStatement(), userSource, guts);
}
return singletonList(snip);
}