Java源码示例:com.sun.tools.javac.code.Symbol.Completer
示例1
public void synthesizeEmptyInterfaceIfMissing(final Type type) {
final Completer completer = type.tsym.completer;
type.tsym.completer = new Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
try {
completer.complete(sym);
} catch (CompletionFailure e) {
sym.flags_field |= (PUBLIC | INTERFACE);
((ClassType) sym.type).supertype_field = objectType;
}
}
@Override
public boolean isTerminal() {
return completer.isTerminal();
}
};
}
示例2
public Completer getUsesProvidesCompleter() {
return sym -> {
ModuleSymbol msym = (ModuleSymbol) sym;
msym.complete();
Env<AttrContext> env = typeEnvs.get(msym);
UsesProvidesVisitor v = new UsesProvidesVisitor(msym, env);
JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
JCModuleDecl decl = env.toplevel.getModuleDecl();
DiagnosticPosition prevLintPos = deferredLintHandler.setPos(decl.pos());
try {
decl.accept(v);
} finally {
log.useSource(prev);
deferredLintHandler.setPos(prevLintPos);
}
};
}
示例3
private Completer getUnnamedModuleCompleter() {
moduleFinder.findAllModules();
return new Symbol.Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
if (inInitModules) {
sym.completer = this;
return ;
}
ModuleSymbol msym = (ModuleSymbol) sym;
Set<ModuleSymbol> allModules = new HashSet<>(allModules());
allModules.remove(syms.unnamedModule);
for (ModuleSymbol m : allModules) {
m.complete();
}
initVisiblePackages(msym, allModules);
}
@Override
public String toString() {
return "unnamedModule Completer";
}
};
}
示例4
public void synthesizeEmptyInterfaceIfMissing(final Type type) {
final Completer completer = type.tsym.completer;
type.tsym.completer = new Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
try {
completer.complete(sym);
} catch (CompletionFailure e) {
sym.flags_field |= (PUBLIC | INTERFACE);
((ClassType) sym.type).supertype_field = objectType;
}
}
@Override
public boolean isTerminal() {
return completer.isTerminal();
}
};
}
示例5
public Completer getUsesProvidesCompleter() {
return sym -> {
ModuleSymbol msym = (ModuleSymbol) sym;
msym.complete();
Env<AttrContext> env = typeEnvs.get(msym);
UsesProvidesVisitor v = new UsesProvidesVisitor(msym, env);
JavaFileObject prev = log.useSource(env.toplevel.sourcefile);
JCModuleDecl decl = env.toplevel.getModuleDecl();
DiagnosticPosition prevLintPos = deferredLintHandler.setPos(decl.pos());
try {
decl.accept(v);
} finally {
log.useSource(prev);
deferredLintHandler.setPos(prevLintPos);
}
};
}
示例6
private Completer getUnnamedModuleCompleter() {
moduleFinder.findAllModules();
return new Symbol.Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
if (inInitModules) {
sym.completer = this;
return ;
}
ModuleSymbol msym = (ModuleSymbol) sym;
Set<ModuleSymbol> allModules = new HashSet<>(allModules());
allModules.remove(syms.unnamedModule);
for (ModuleSymbol m : allModules) {
m.complete();
}
initVisiblePackages(msym, allModules);
}
@Override
public String toString() {
return "unnamedModule Completer";
}
};
}
示例7
public void synthesizeEmptyInterfaceIfMissing(final Type type) {
final Completer completer = type.tsym.completer;
if (completer != null) {
type.tsym.completer = new Completer() {
public void complete(Symbol sym) throws CompletionFailure {
try {
completer.complete(sym);
} catch (CompletionFailure e) {
sym.flags_field |= (PUBLIC | INTERFACE);
((ClassType) sym.type).supertype_field = objectType;
}
}
};
}
}
示例8
private void findModuleInfo(ModuleSymbol msym) {
try {
JavaFileObject fo;
fo = getModuleInfoFromLocation(msym.patchOutputLocation, Kind.CLASS);
fo = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.CLASS), fo);
fo = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.SOURCE), fo);
if (fo == null) {
fo = getModuleInfoFromLocation(msym.classLocation, Kind.CLASS);
fo = preferredFileObject(getModuleInfoFromLocation(msym.sourceLocation, Kind.SOURCE), fo);
}
if (fo == null) {
String moduleName = msym.sourceLocation == null && msym.classLocation != null ?
fileManager.inferModuleName(msym.classLocation) : null;
if (moduleName != null) {
msym.module_info.classfile = null;
msym.flags_field |= Flags.AUTOMATIC_MODULE;
} else {
msym.kind = ERR;
}
} else {
msym.module_info.classfile = fo;
msym.module_info.completer = new Symbol.Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
classFinder.fillIn(msym.module_info);
}
@Override
public String toString() {
return "ModuleInfoCompleter";
}
};
}
} catch (IOException e) {
msym.kind = ERR;
}
}
示例9
private Type enterSyntheticAnnotation(String name) {
// for now, leave the module null, to prevent problems from synthesizing the
// existence of a class in any specific module, including noModule
ClassType type = (ClassType)enterClass(java_base, names.fromString(name)).type;
ClassSymbol sym = (ClassSymbol)type.tsym;
sym.completer = Completer.NULL_COMPLETER;
sym.flags_field = PUBLIC|ACYCLIC|ANNOTATION|INTERFACE;
sym.erasure_field = type;
sym.members_field = WriteableScope.create(sym);
type.typarams_field = List.nil();
type.allparams_field = List.nil();
type.supertype_field = annotationType;
type.interfaces_field = List.nil();
return type;
}
示例10
JCClassDecl makeEmptyClass(long flags, ClassSymbol owner, Name flatname,
boolean addToDefs) {
// Create class symbol.
ClassSymbol c = syms.defineClass(names.empty, owner);
if (flatname != null) {
c.flatname = flatname;
} else {
c.flatname = chk.localClassName(c);
}
c.sourcefile = owner.sourcefile;
c.completer = Completer.NULL_COMPLETER;
c.members_field = WriteableScope.create(c);
c.flags_field = flags;
ClassType ctype = (ClassType) c.type;
ctype.supertype_field = syms.objectType;
ctype.interfaces_field = List.nil();
JCClassDecl odef = classDef(owner);
// Enter class symbol in owner scope and compiled table.
enterSynthetic(odef.pos(), c, owner.members());
chk.putCompiled(c);
// Create class definition tree.
JCClassDecl cdef = make.ClassDef(
make.Modifiers(flags), names.empty,
List.nil(),
null, List.nil(), List.nil());
cdef.sym = c;
cdef.type = c.type;
// Append class definition tree to owner's definitions.
if (addToDefs) odef.defs = odef.defs.prepend(cdef);
return cdef;
}
示例11
private Completer getSourceCompleter(JCCompilationUnit tree) {
return new Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
ModuleSymbol msym = (ModuleSymbol) sym;
msym.flags_field |= UNATTRIBUTED;
ModuleVisitor v = new ModuleVisitor();
JavaFileObject prev = log.useSource(tree.sourcefile);
JCModuleDecl moduleDecl = tree.getModuleDecl();
DiagnosticPosition prevLintPos = deferredLintHandler.setPos(moduleDecl.pos());
try {
moduleDecl.accept(v);
completeModule(msym);
checkCyclicDependencies(moduleDecl);
} finally {
log.useSource(prev);
deferredLintHandler.setPos(prevLintPos);
msym.flags_field &= ~UNATTRIBUTED;
}
}
@Override
public String toString() {
return "SourceCompleter: " + tree.sourcefile.getName();
}
};
}
示例12
public void synthesizeEmptyInterfaceIfMissing(final Type type) {
final Completer completer = type.tsym.completer;
if (completer != null) {
type.tsym.completer = new Completer() {
public void complete(Symbol sym) throws CompletionFailure {
try {
completer.complete(sym);
} catch (CompletionFailure e) {
sym.flags_field |= (PUBLIC | INTERFACE);
((ClassType) sym.type).supertype_field = objectType;
}
}
};
}
}
示例13
private void findModuleInfo(ModuleSymbol msym) {
try {
JavaFileObject fo;
fo = getModuleInfoFromLocation(msym.patchOutputLocation, Kind.CLASS);
fo = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.CLASS), fo);
fo = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.SOURCE), fo);
if (fo == null) {
fo = getModuleInfoFromLocation(msym.classLocation, Kind.CLASS);
fo = preferredFileObject(getModuleInfoFromLocation(msym.sourceLocation, Kind.SOURCE), fo);
}
if (fo == null) {
String moduleName = msym.sourceLocation == null && msym.classLocation != null ?
fileManager.inferModuleName(msym.classLocation) : null;
if (moduleName != null) {
msym.module_info.classfile = null;
msym.flags_field |= Flags.AUTOMATIC_MODULE;
} else {
msym.kind = ERR;
}
} else {
msym.module_info.classfile = fo;
msym.module_info.completer = new Symbol.Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
classFinder.fillIn(msym.module_info);
}
@Override
public String toString() {
return "ModuleInfoCompleter";
}
};
}
} catch (IOException e) {
msym.kind = ERR;
}
}
示例14
private Type enterSyntheticAnnotation(String name) {
// for now, leave the module null, to prevent problems from synthesizing the
// existence of a class in any specific module, including noModule
ClassType type = (ClassType)enterClass(java_base, names.fromString(name)).type;
ClassSymbol sym = (ClassSymbol)type.tsym;
sym.completer = Completer.NULL_COMPLETER;
sym.flags_field = PUBLIC|ACYCLIC|ANNOTATION|INTERFACE;
sym.erasure_field = type;
sym.members_field = WriteableScope.create(sym);
type.typarams_field = List.nil();
type.allparams_field = List.nil();
type.supertype_field = annotationType;
type.interfaces_field = List.nil();
return type;
}
示例15
private Completer getSourceCompleter(JCCompilationUnit tree) {
return new Completer() {
@Override
public void complete(Symbol sym) throws CompletionFailure {
ModuleSymbol msym = (ModuleSymbol) sym;
msym.flags_field |= UNATTRIBUTED;
ModuleVisitor v = new ModuleVisitor();
JavaFileObject prev = log.useSource(tree.sourcefile);
JCModuleDecl moduleDecl = tree.getModuleDecl();
DiagnosticPosition prevLintPos = deferredLintHandler.setPos(moduleDecl.pos());
try {
moduleDecl.accept(v);
completeModule(msym);
checkCyclicDependencies(moduleDecl);
} finally {
log.useSource(prev);
deferredLintHandler.setPos(prevLintPos);
msym.flags_field &= ~UNATTRIBUTED;
}
}
@Override
public String toString() {
return "SourceCompleter: " + tree.sourcefile.getName();
}
};
}
示例16
private ModuleSymbol readModule(JavaFileObject fo) throws IOException {
Name name;
switch (fo.getKind()) {
case SOURCE:
name = moduleNameFromSourceReader.readModuleName(fo);
if (name == null) {
JCDiagnostic diag =
diags.fragment(Fragments.FileDoesNotContainModule);
ClassSymbol errModuleInfo = syms.defineClass(names.module_info, syms.errModule);
throw new ClassFinder.BadClassFile(errModuleInfo, fo, diag, diags);
}
break;
case CLASS:
try {
name = names.fromString(readModuleName(fo));
} catch (BadClassFile | IOException ex) {
//fillIn will report proper errors:
name = names.error;
}
break;
default:
Assert.error();
name = names.error;
break;
}
ModuleSymbol msym = syms.enterModule(name);
msym.module_info.classfile = fo;
if (fileManager.hasLocation(StandardLocation.PATCH_MODULE_PATH) && name != names.error) {
msym.patchLocation = fileManager.getLocationForModule(StandardLocation.PATCH_MODULE_PATH, name.toString());
if (msym.patchLocation != null) {
JavaFileObject patchFO = getModuleInfoFromLocation(StandardLocation.CLASS_OUTPUT, Kind.CLASS);
patchFO = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.CLASS), patchFO);
patchFO = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.SOURCE), patchFO);
if (patchFO != null) {
msym.module_info.classfile = patchFO;
}
}
}
msym.completer = Completer.NULL_COMPLETER;
classFinder.fillIn(msym.module_info);
return msym;
}
示例17
public Completer getCompleter() {
return thisCompleter;
}
示例18
public Completer getCompleter() {
return mainCompleter;
}
示例19
private ModuleSymbol readModule(JavaFileObject fo) throws IOException {
Name name;
switch (fo.getKind()) {
case SOURCE:
name = moduleNameFromSourceReader.readModuleName(fo);
if (name == null) {
JCDiagnostic diag =
diags.fragment("file.does.not.contain.module");
ClassSymbol errModuleInfo = syms.defineClass(names.module_info, syms.errModule);
throw new ClassFinder.BadClassFile(errModuleInfo, fo, diag, diags);
}
break;
case CLASS:
try {
name = names.fromString(readModuleName(fo));
} catch (BadClassFile | IOException ex) {
//fillIn will report proper errors:
name = names.error;
}
break;
default:
Assert.error();
name = names.error;
break;
}
ModuleSymbol msym = syms.enterModule(name);
msym.module_info.classfile = fo;
if (fileManager.hasLocation(StandardLocation.PATCH_MODULE_PATH) && name != names.error) {
msym.patchLocation = fileManager.getLocationForModule(StandardLocation.PATCH_MODULE_PATH, name.toString());
if (msym.patchLocation != null) {
JavaFileObject patchFO = getModuleInfoFromLocation(StandardLocation.CLASS_OUTPUT, Kind.CLASS);
patchFO = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.CLASS), patchFO);
patchFO = preferredFileObject(getModuleInfoFromLocation(msym.patchLocation, Kind.SOURCE), patchFO);
if (patchFO != null) {
msym.module_info.classfile = patchFO;
}
}
}
msym.completer = Completer.NULL_COMPLETER;
classFinder.fillIn(msym.module_info);
return msym;
}
示例20
public Completer getCompleter() {
return thisCompleter;
}
示例21
public Completer getCompleter() {
return mainCompleter;
}