KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));
String extension = FileUtilRt.getExtension(psiFile.getName());
if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || (psiFile instanceof KtFile && ((KtFile) psiFile).isCompiled())) {
ktParsing.parseFile();
} else {
ktParsing.parseScript();
}
return psiBuilder.getTreeBuilt();
}
}
可以看到Kotlin的语法分析是通过KotlinParsing进行的,在parse方法中创建KotlinParsing然后把要分析的文件传递过去,这里的文件也就是我们熟悉的以 .kt结尾的文件。当然也不局限于kt文件。接着我们跟进下ktParsing.parseFile();
public class KotlinParsing extends AbstractKotlinParsing {
void parseFile() {
PsiBuilder.Marker fileMarker = mark();
//分析类的注释、package、import*
parsePreamble();
while (!eof()) {
//分析包、类、方法的声明方法,例如:package、class、function
parseTopLe