< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacFiler.java

Print this page

        

*** 51,60 **** --- 51,61 ---- import static javax.tools.StandardLocation.CLASS_OUTPUT; import com.sun.tools.javac.code.Lint; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symbol.ModuleSymbol; + import com.sun.tools.javac.code.Symbol.TypeSymbol; import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.comp.Modules; import com.sun.tools.javac.model.JavacElements; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.*;
*** 715,725 **** checkName(typename, allowUnnamedPackageInfo); ClassSymbol existing = elementUtils.getTypeElement(typename); boolean alreadySeen = aggregateGeneratedSourceNames.contains(Pair.of(mod, typename)) || aggregateGeneratedClassNames.contains(Pair.of(mod, typename)) || initialClassNames.contains(typename) || ! (existing != null && initialInputs.contains(existing.sourcefile)); if (alreadySeen) { if (lint) log.warning(Warnings.ProcTypeRecreate(typename)); throw new FilerException("Attempt to recreate a file for type " + typename); } --- 716,726 ---- checkName(typename, allowUnnamedPackageInfo); ClassSymbol existing = elementUtils.getTypeElement(typename); boolean alreadySeen = aggregateGeneratedSourceNames.contains(Pair.of(mod, typename)) || aggregateGeneratedClassNames.contains(Pair.of(mod, typename)) || initialClassNames.contains(typename) || ! containedInInitialInputs(typename); if (alreadySeen) { if (lint) log.warning(Warnings.ProcTypeRecreate(typename)); throw new FilerException("Attempt to recreate a file for type " + typename); }
*** 729,738 **** --- 730,755 ---- if (!mod.isUnnamed() && !typename.contains(".")) { throw new FilerException("Attempt to create a type in unnamed package of a named module: " + typename); } } + private boolean containedInInitialInputs(String typename) { + // Name could be a type name or the name of a package-info file + JavaFileObject sourceFile = null; + + ClassSymbol existingClass = elementUtils.getTypeElement(typename); + if (existingClass != null) { + sourceFile = existingClass.sourcefile; + } else if (typename.endsWith(".package-info")) { + String targetName = typename.substring(0, typename.length() - ".package-info".length()); + PackageSymbol existingPackage = elementUtils.getPackageElement(targetName); + if (existingPackage != null) + sourceFile = existingPackage.sourcefile; + } + return (sourceFile == null) ? false : initialInputs.contains(sourceFile); + } + /** * Check to see if the file has already been opened; if so, throw * an exception, otherwise add it to the set of files. */ private void checkFileReopening(FileObject fileObject, boolean forWriting) throws FilerException {
< prev index next >