public static void genClassOrObject( @NotNull CodegenContext parentContext, @NotNull JetClassOrObject aClass, @NotNull GenerationState state, @Nullable MemberCodegen<?> parentCodegen) { ClassDescriptor descriptor = state.getBindingContext().get(BindingContext.CLASS, aClass); if (descriptor == null || ErrorUtils.isError(descriptor)) { badDescriptor(descriptor, state.getClassBuilderMode()); return; } if (descriptor.getName().equals(SpecialNames.NO_NAME_PROVIDED)) { badDescriptor(descriptor, state.getClassBuilderMode()); } ClassBuilder classBuilder = state.getFactory().forClassImplementation(descriptor, aClass.getContainingFile()); ClassContext classContext = parentContext.intoClass(descriptor, OwnerKind.IMPLEMENTATION, state); new ImplementationBodyCodegen(aClass, classContext, classBuilder, state, parentCodegen) .generate(); if (aClass instanceof JetClass && ((JetClass) aClass).isTrait()) { ClassBuilder traitImplBuilder = state.getFactory().forTraitImplementation(descriptor, state, aClass.getContainingFile()); ClassContext traitImplContext = parentContext.intoClass(descriptor, OwnerKind.TRAIT_IMPL, state); new TraitImplBodyCodegen(aClass, traitImplContext, traitImplBuilder, state, parentCodegen) .generate(); } }
public static void deleteClass(@NotNull JetClassOrObject clazz) { CheckUtil.checkWritable(clazz); JetFile file = (JetFile) clazz.getContainingFile(); List<JetDeclaration> declarations = file.getDeclarations(); if (declarations.size() == 1) { file.delete(); } else { PsiElement parent = clazz.getParent(); CodeEditUtil.removeChild(parent.getNode(), clazz.getNode()); } }
@Nullable @Override public PsiClass getPsiClass(@NotNull JetClassOrObject classOrObject) { VirtualFile virtualFile = classOrObject.getContainingFile().getVirtualFile(); if (virtualFile != null && LibraryUtil.findLibraryEntry(virtualFile, classOrObject.getProject()) != null) { if (ProjectRootsUtil.isLibraryClassFile(project, virtualFile)) { return getLightClassForDecompiledClassOrObject(classOrObject); } return JetSourceNavigationHelper.getOriginalClass(classOrObject); } return KotlinLightClassForExplicitDeclaration.create(psiManager, classOrObject); }