@Override public ClassDescriptor getClassObjectDescriptor() { if (!classObjectDescriptorResolved) { JetClassObject classObject = declarationProvider.getOwnerInfo().getClassObject(); JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject); if (classObjectInfo != null) { classObjectDescriptor = new LazyClassDescriptor( resolveSession, this, getClassObjectName(getName()), classObjectInfo); } classObjectDescriptorResolved = true; } return classObjectDescriptor; }
@Override public List<AnnotationDescriptor> getAnnotations() { if (annotations == null) { JetClassLikeInfo classInfo = declarationProvider.getOwnerInfo(); JetModifierList modifierList = classInfo.getModifierList(); if (modifierList != null) { AnnotationResolver annotationResolver = resolveSession.getInjector().getAnnotationResolver(); annotations = annotationResolver.resolveAnnotations( resolveSession.getResolutionScope(classInfo.getScopeAnchor()), modifierList, resolveSession.getTrace()); } else { annotations = Collections.emptyList(); } } return annotations; }
@NotNull public JetScope getScopeForClassHeaderResolution() { if (scopeForClassHeaderResolution == null) { WritableScopeImpl scope = new WritableScopeImpl( JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Class Header Resolution"); for (TypeParameterDescriptor typeParameterDescriptor : getTypeConstructor().getParameters()) { scope.addClassifierDescriptor(typeParameterDescriptor); } scope.changeLockLevel(WritableScope.LockLevel.READING); scopeForClassHeaderResolution = new ChainedScope( this, scope, resolveSession.getResolutionScope( declarationProvider.getOwnerInfo().getScopeAnchor())); } return scopeForClassHeaderResolution; }