undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
255
test/langtools/tools/lib/builder/AbstractBuilder.java
Normal file
255
test/langtools/tools/lib/builder/AbstractBuilder.java
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
/*
|
||||
* Copyright (c) 2018, 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.
|
||||
*
|
||||
* 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 builder;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbstractBuilder {
|
||||
|
||||
final String name;
|
||||
|
||||
Modifiers modifiers;
|
||||
Comment comments;
|
||||
String cname;
|
||||
|
||||
/**
|
||||
* Constructs the base builder.
|
||||
* @param modifiers for the class
|
||||
* @param name of the element
|
||||
*/
|
||||
public AbstractBuilder(Modifiers modifiers, String name) {
|
||||
this.modifiers = modifiers;
|
||||
this.name = name;
|
||||
this.comments = new Comment(Comment.Kind.AUTO);
|
||||
}
|
||||
|
||||
AbstractBuilder setModifiers(String... mods) {
|
||||
this.modifiers = new Modifiers(mods);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the enclosing type's name.
|
||||
* @param className the enclosing type's name
|
||||
*/
|
||||
void setClassName(String className) {
|
||||
this.cname = className;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the comment type for the member.
|
||||
* @param comment for the member.
|
||||
* @return this builder.
|
||||
*/
|
||||
public AbstractBuilder setComments(Comment comment) {
|
||||
this.comments = comment;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the comments for the member.
|
||||
* @param comments for the member.
|
||||
* @return this builder.
|
||||
*/
|
||||
public AbstractBuilder setComments(String... comments) {
|
||||
this.comments = new Comment(comments);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a comment for the element. Typically used to set
|
||||
* user's preferences whether an automatic comment is
|
||||
* required or no API comment.
|
||||
*
|
||||
* @param kind of comment, automatic or no comment.
|
||||
* @return this builder.
|
||||
*/
|
||||
public AbstractBuilder setComments(Comment.Kind kind) {
|
||||
switch (kind) {
|
||||
case NO_API_COMMENT: case AUTO: case INHERIT_DOC:
|
||||
this.comments = new Comment(kind);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(kind + " not allowed");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The comment container.
|
||||
*/
|
||||
public static class Comment {
|
||||
|
||||
/**
|
||||
* The kinds of a comment.
|
||||
*/
|
||||
public enum Kind {
|
||||
/**
|
||||
* user specified
|
||||
*/
|
||||
USER,
|
||||
/**
|
||||
* no API comments
|
||||
*/
|
||||
NO_API_COMMENT,
|
||||
/**
|
||||
* inserts the javadoc tag
|
||||
*/
|
||||
INHERIT_DOC,
|
||||
/**
|
||||
* auto generate one
|
||||
*/
|
||||
AUTO
|
||||
}
|
||||
|
||||
final Kind kind;
|
||||
final List<String> comments;
|
||||
|
||||
/**
|
||||
* Construct an initial comment.
|
||||
*
|
||||
* @param kind
|
||||
*/
|
||||
public Comment(Kind kind) {
|
||||
this.kind = kind;
|
||||
comments = Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a user comment.
|
||||
*
|
||||
* @param comments the string of API comments.
|
||||
*/
|
||||
public Comment(String... comments) {
|
||||
kind = Kind.USER;
|
||||
this.comments = comments == null
|
||||
? Collections.emptyList()
|
||||
: List.of(comments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
ClassBuilder.OutputWriter ow = new ClassBuilder.OutputWriter();
|
||||
switch (kind) {
|
||||
case USER:
|
||||
comments.forEach((s) -> ow.println(" " + s));
|
||||
break;
|
||||
case INHERIT_DOC:
|
||||
ow.println("{@inheritDoc}");
|
||||
break;
|
||||
}
|
||||
return ow.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The modifier representation for an element.
|
||||
*/
|
||||
public static class Modifiers {
|
||||
List<String> modifiers;
|
||||
|
||||
/**
|
||||
* Constructs a modifier container.
|
||||
* @param modifiers for an element.
|
||||
*/
|
||||
public Modifiers(String... modifiers) {
|
||||
this.modifiers = List.of(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a modifier container.
|
||||
* @param modifiers a list of modifier strings.
|
||||
*/
|
||||
public Modifiers(List<String> modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modifiers for this element.
|
||||
* @param modifiers
|
||||
*/
|
||||
public void setModifiers(String... modifiers) {
|
||||
this.modifiers = List.of(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modifiers for this element.
|
||||
* @param modifiers
|
||||
*/
|
||||
public void setModifiers(List<String> modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
OutputWriter ow = new OutputWriter();
|
||||
modifiers.forEach(i -> ow.print(i + " "));
|
||||
return ow.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The output writer.
|
||||
*/
|
||||
public static class OutputWriter {
|
||||
private final StringWriter sw = new StringWriter();
|
||||
private final PrintWriter pw = new PrintWriter(sw);
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return sw.getBuffer().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints a string without NL.
|
||||
* @param s the string to print.
|
||||
*/
|
||||
public void print(String s) {
|
||||
pw.print(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints a string with a NL.
|
||||
* @param s the string to print.
|
||||
*/
|
||||
public void println(String s) {
|
||||
pw.println(s);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A container to encapsulate a pair of values.
|
||||
*/
|
||||
public static class Pair {
|
||||
final String first;
|
||||
final String second;
|
||||
|
||||
public Pair(String first, String second) {
|
||||
this.first = first;
|
||||
this.second = second;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue