ProgramDeclaration.java
package net.morimekta.providence.reflect.model;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <pre>{@code
* declaration ::= {documentation} ({typedef} | {enum} | {message} | {service} | {const})
* program ::= {namespace|include}* {declaration}*
* }</pre>
*/
public class ProgramDeclaration {
private final String documentation;
private final String programName;
private final List<IncludeDeclaration> includes;
private final List<NamespaceDeclaration> namespaces;
private final List<Declaration> declarationList;
public ProgramDeclaration(@Nullable String documentation,
@Nonnull String programName,
@Nonnull List<IncludeDeclaration> includes,
@Nonnull List<NamespaceDeclaration> namespaces,
@Nonnull List<Declaration> declarationList) {
this.documentation = documentation;
this.programName = programName;
this.includes = includes;
this.namespaces = namespaces;
this.declarationList = declarationList;
}
public String getDocumentation() {
return documentation;
}
public String getProgramName() {
return programName;
}
public List<IncludeDeclaration> getIncludes() {
return includes;
}
public List<NamespaceDeclaration> getNamespaces() {
return namespaces;
}
public List<Declaration> getDeclarationList() {
return declarationList;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof ProgramDeclaration)) return false;
ProgramDeclaration other = (ProgramDeclaration) obj;
return Objects.equals(documentation, other.documentation) &&
Objects.equals(programName, other.programName) &&
Objects.equals(includes, other.includes) &&
Objects.equals(namespaces, other.namespaces) &&
Objects.equals(declarationList, other.declarationList);
}
@Override
public String toString() {
return "ThriftProgram{" + programName + ".{" +
declarationList.stream().map(Declaration::getName).collect(Collectors.joining(",")) + "}}";
}
}