forked from OSchip/llvm-project
Rename ObjCMethodDecl::isSynthesized to isPropertyAccessor.
This more accurately reflects its use: this flag is set when a method matches the getter or setter name for a property in the same class, and does not actually specify whether or not the definition of the method will be synthesized (either implicitly or explicitly with @synthesize). This renames the setter and backing field as well, and changes the (soon-to-be-obsolete?) XML dump format to use 'property_accessor' instead of 'synthesized'. llvm-svn: 165626
This commit is contained in:
parent
effae0c8e1
commit
d01e83ab3e
|
@ -123,8 +123,8 @@ private:
|
|||
unsigned IsInstance : 1;
|
||||
unsigned IsVariadic : 1;
|
||||
|
||||
// Synthesized declaration method for a property setter/getter
|
||||
unsigned IsSynthesized : 1;
|
||||
/// True if this method is the getter or setter for an explicit property.
|
||||
unsigned IsPropertyAccessor : 1;
|
||||
|
||||
// Method has a definition.
|
||||
unsigned IsDefined : 1;
|
||||
|
@ -226,7 +226,7 @@ private:
|
|||
DeclContext *contextDecl,
|
||||
bool isInstance = true,
|
||||
bool isVariadic = false,
|
||||
bool isSynthesized = false,
|
||||
bool isPropertyAccessor = false,
|
||||
bool isImplicitlyDeclared = false,
|
||||
bool isDefined = false,
|
||||
ImplementationControl impControl = None,
|
||||
|
@ -234,7 +234,7 @@ private:
|
|||
: NamedDecl(ObjCMethod, contextDecl, beginLoc, SelInfo),
|
||||
DeclContext(ObjCMethod), Family(InvalidObjCMethodFamily),
|
||||
IsInstance(isInstance), IsVariadic(isVariadic),
|
||||
IsSynthesized(isSynthesized),
|
||||
IsPropertyAccessor(isPropertyAccessor),
|
||||
IsDefined(isDefined), IsRedeclaration(0), HasRedeclaration(0),
|
||||
DeclImplementation(impControl), objcDeclQualifier(OBJC_TQ_None),
|
||||
RelatedResultType(HasRelatedResultType),
|
||||
|
@ -260,7 +260,7 @@ public:
|
|||
DeclContext *contextDecl,
|
||||
bool isInstance = true,
|
||||
bool isVariadic = false,
|
||||
bool isSynthesized = false,
|
||||
bool isPropertyAccessor = false,
|
||||
bool isImplicitlyDeclared = false,
|
||||
bool isDefined = false,
|
||||
ImplementationControl impControl = None,
|
||||
|
@ -402,8 +402,8 @@ public:
|
|||
|
||||
bool isClassMethod() const { return !IsInstance; }
|
||||
|
||||
bool isSynthesized() const { return IsSynthesized; }
|
||||
void setSynthesized(bool isSynth) { IsSynthesized = isSynth; }
|
||||
bool isPropertyAccessor() const { return IsPropertyAccessor; }
|
||||
void setPropertyAccessor(bool isAccessor) { IsPropertyAccessor = isAccessor; }
|
||||
|
||||
bool isDefined() const { return IsDefined; }
|
||||
void setDefined(bool isDefined) { IsDefined = isDefined; }
|
||||
|
|
|
@ -3080,7 +3080,7 @@ Decl *ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {
|
|||
ResultTy, ResultTInfo, DC,
|
||||
D->isInstanceMethod(),
|
||||
D->isVariadic(),
|
||||
D->isSynthesized(),
|
||||
D->isPropertyAccessor(),
|
||||
D->isImplicit(),
|
||||
D->isDefined(),
|
||||
D->getImplementationControl(),
|
||||
|
|
|
@ -425,16 +425,15 @@ ObjCMethodDecl *ObjCMethodDecl::Create(ASTContext &C,
|
|||
DeclContext *contextDecl,
|
||||
bool isInstance,
|
||||
bool isVariadic,
|
||||
bool isSynthesized,
|
||||
bool isPropertyAccessor,
|
||||
bool isImplicitlyDeclared,
|
||||
bool isDefined,
|
||||
ImplementationControl impControl,
|
||||
bool HasRelatedResultType) {
|
||||
return new (C) ObjCMethodDecl(beginLoc, endLoc,
|
||||
SelInfo, T, ResultTInfo, contextDecl,
|
||||
isInstance,
|
||||
isVariadic, isSynthesized, isImplicitlyDeclared,
|
||||
isDefined,
|
||||
isInstance, isVariadic, isPropertyAccessor,
|
||||
isImplicitlyDeclared, isDefined,
|
||||
impControl,
|
||||
HasRelatedResultType);
|
||||
}
|
||||
|
|
|
@ -841,7 +841,7 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>,
|
|||
|
||||
setFlag("instance", D->isInstanceMethod());
|
||||
setFlag("variadic", D->isVariadic());
|
||||
setFlag("synthesized", D->isSynthesized());
|
||||
setFlag("property_accessor", D->isPropertyAccessor());
|
||||
setFlag("defined", D->isDefined());
|
||||
setFlag("related_result_type", D->hasRelatedResultType());
|
||||
}
|
||||
|
|
|
@ -2448,7 +2448,7 @@ void CodeGenModule::EmitObjCPropertyImplementations(const
|
|||
ObjCPropertyDecl *PD = PID->getPropertyDecl();
|
||||
|
||||
// Determine which methods need to be implemented, some may have
|
||||
// been overridden. Note that ::isSynthesized is not the method
|
||||
// been overridden. Note that ::isPropertyAccessor is not the method
|
||||
// we want, that just indicates if the decl came from a
|
||||
// property. What we want to know is if the method is defined in
|
||||
// this implementation.
|
||||
|
@ -2484,7 +2484,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
|
|||
ObjCMethodDecl::Create(getContext(), D->getLocation(), D->getLocation(),
|
||||
cxxSelector, getContext().VoidTy, 0, D,
|
||||
/*isInstance=*/true, /*isVariadic=*/false,
|
||||
/*isSynthesized=*/true, /*isImplicitlyDeclared=*/true,
|
||||
/*isPropertyAccessor=*/true, /*isImplicitlyDeclared=*/true,
|
||||
/*isDefined=*/false, ObjCMethodDecl::Required);
|
||||
D->addInstanceMethod(DTORMethod);
|
||||
CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
|
||||
|
@ -2506,7 +2506,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
|
|||
getContext().getObjCIdType(), 0,
|
||||
D, /*isInstance=*/true,
|
||||
/*isVariadic=*/false,
|
||||
/*isSynthesized=*/true,
|
||||
/*isPropertyAccessor=*/true,
|
||||
/*isImplicitlyDeclared=*/true,
|
||||
/*isDefined=*/false,
|
||||
ObjCMethodDecl::Required);
|
||||
|
|
|
@ -1578,9 +1578,9 @@ void Sema::CheckProtocolMethodDefs(SourceLocation ImpLoc,
|
|||
E = PDecl->instmeth_end(); I != E; ++I) {
|
||||
ObjCMethodDecl *method = *I;
|
||||
if (method->getImplementationControl() != ObjCMethodDecl::Optional &&
|
||||
!method->isSynthesized() && !InsMap.count(method->getSelector()) &&
|
||||
(!Super ||
|
||||
!Super->lookupInstanceMethod(method->getSelector()))) {
|
||||
!method->isPropertyAccessor() &&
|
||||
!InsMap.count(method->getSelector()) &&
|
||||
(!Super || !Super->lookupInstanceMethod(method->getSelector()))) {
|
||||
// If a method is not implemented in the category implementation but
|
||||
// has been declared in its primary class, superclass,
|
||||
// or in one of their protocols, no need to issue the warning.
|
||||
|
@ -1593,7 +1593,7 @@ void Sema::CheckProtocolMethodDefs(SourceLocation ImpLoc,
|
|||
if (ObjCMethodDecl *MethodInClass =
|
||||
IDecl->lookupInstanceMethod(method->getSelector(),
|
||||
true /*shallowCategoryLookup*/))
|
||||
if (C || MethodInClass->isSynthesized())
|
||||
if (C || MethodInClass->isPropertyAccessor())
|
||||
continue;
|
||||
unsigned DIAG = diag::warn_unimplemented_protocol_method;
|
||||
if (Diags.getDiagnosticLevel(DIAG, ImpLoc)
|
||||
|
@ -1654,7 +1654,7 @@ void Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap,
|
|||
if (InsMapSeen.count((*I)->getSelector()))
|
||||
continue;
|
||||
InsMapSeen.insert((*I)->getSelector());
|
||||
if (!(*I)->isSynthesized() &&
|
||||
if (!(*I)->isPropertyAccessor() &&
|
||||
!InsMap.count((*I)->getSelector())) {
|
||||
if (ImmediateClass)
|
||||
WarnUndefinedMethod(IMPDecl->getLocation(), *I, IncompleteImpl,
|
||||
|
@ -1671,7 +1671,7 @@ void Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap,
|
|||
if (!WarnCategoryMethodImpl)
|
||||
WarnConflictingTypedMethods(ImpMethodDecl, MethodDecl,
|
||||
isa<ObjCProtocolDecl>(CDecl));
|
||||
else if (!MethodDecl->isSynthesized())
|
||||
else if (!MethodDecl->isPropertyAccessor())
|
||||
WarnExactTypedMethods(ImpMethodDecl, MethodDecl,
|
||||
isa<ObjCProtocolDecl>(CDecl));
|
||||
}
|
||||
|
@ -2372,11 +2372,11 @@ Decl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd,
|
|||
CExtDecl; CExtDecl = CExtDecl->getNextClassExtension()) {
|
||||
if (ObjCMethodDecl *GetterMethod =
|
||||
CExtDecl->getInstanceMethod(Property->getGetterName()))
|
||||
GetterMethod->setSynthesized(true);
|
||||
GetterMethod->setPropertyAccessor(true);
|
||||
if (!Property->isReadOnly())
|
||||
if (ObjCMethodDecl *SetterMethod =
|
||||
CExtDecl->getInstanceMethod(Property->getSetterName()))
|
||||
SetterMethod->setSynthesized(true);
|
||||
SetterMethod->setPropertyAccessor(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2824,7 +2824,7 @@ Decl *Sema::ActOnMethodDeclaration(
|
|||
ResultTInfo,
|
||||
CurContext,
|
||||
MethodType == tok::minus, isVariadic,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/false, /*isDefined=*/false,
|
||||
MethodDeclKind == tok::objc_optional
|
||||
? ObjCMethodDecl::Optional
|
||||
|
|
|
@ -229,7 +229,7 @@ static ObjCMethodDecl *getNSNumberFactoryMethod(Sema &S, SourceLocation Loc,
|
|||
S.NSNumberPointer, ResultTInfo,
|
||||
S.NSNumberDecl,
|
||||
/*isInstance=*/false, /*isVariadic=*/false,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true,
|
||||
/*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
|
@ -477,7 +477,7 @@ ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {
|
|||
stringWithUTF8String, NSStringPointer,
|
||||
ResultTInfo, NSStringDecl,
|
||||
/*isInstance=*/false, /*isVariadic=*/false,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true,
|
||||
/*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
|
@ -646,7 +646,7 @@ ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {
|
|||
ResultTInfo,
|
||||
Context.getTranslationUnitDecl(),
|
||||
false /*Instance*/, false/*isVariadic*/,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true, /*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
false);
|
||||
|
@ -764,7 +764,7 @@ ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR,
|
|||
0 /*TypeSourceInfo */,
|
||||
Context.getTranslationUnitDecl(),
|
||||
false /*Instance*/, false/*isVariadic*/,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true, /*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
false);
|
||||
|
@ -1328,7 +1328,7 @@ static void DiagnoseARCUseOfWeakReceiver(Sema &S, Expr *Receiver) {
|
|||
// See if receiver is a method which envokes a synthesized getter
|
||||
// backing a 'weak' property.
|
||||
ObjCMethodDecl *Method = ME->getMethodDecl();
|
||||
if (Method && Method->isSynthesized()) {
|
||||
if (Method && Method->isPropertyAccessor()) {
|
||||
Selector Sel = Method->getSelector();
|
||||
if (Sel.getNumArgs() == 0) {
|
||||
const DeclContext *Container = Method->getDeclContext();
|
||||
|
|
|
@ -1929,7 +1929,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
|||
GetterMethod = ObjCMethodDecl::Create(Context, Loc, Loc,
|
||||
property->getGetterName(),
|
||||
property->getType(), 0, CD, /*isInstance=*/true,
|
||||
/*isVariadic=*/false, /*isSynthesized=*/true,
|
||||
/*isVariadic=*/false, /*isPropertyAccessor=*/true,
|
||||
/*isImplicitlyDeclared=*/true, /*isDefined=*/false,
|
||||
(property->getPropertyImplementation() ==
|
||||
ObjCPropertyDecl::Optional) ?
|
||||
|
@ -1949,7 +1949,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
|||
} else
|
||||
// A user declared getter will be synthesize when @synthesize of
|
||||
// the property with the same name is seen in the @implementation
|
||||
GetterMethod->setSynthesized(true);
|
||||
GetterMethod->setPropertyAccessor(true);
|
||||
property->setGetterMethodDecl(GetterMethod);
|
||||
|
||||
// Skip setter if property is read-only.
|
||||
|
@ -1967,7 +1967,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
|||
ObjCMethodDecl::Create(Context, Loc, Loc,
|
||||
property->getSetterName(), Context.VoidTy, 0,
|
||||
CD, /*isInstance=*/true, /*isVariadic=*/false,
|
||||
/*isSynthesized=*/true,
|
||||
/*isPropertyAccessor=*/true,
|
||||
/*isImplicitlyDeclared=*/true,
|
||||
/*isDefined=*/false,
|
||||
(property->getPropertyImplementation() ==
|
||||
|
@ -1998,7 +1998,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
|||
} else
|
||||
// A user declared setter will be synthesize when @synthesize of
|
||||
// the property with the same name is seen in the @implementation
|
||||
SetterMethod->setSynthesized(true);
|
||||
SetterMethod->setPropertyAccessor(true);
|
||||
property->setSetterMethodDecl(SetterMethod);
|
||||
}
|
||||
// Add any synthesized methods to the global pool. This allows us to
|
||||
|
|
|
@ -552,7 +552,7 @@ bool ObjCPropertyOpBuilder::findSetter(bool warn) {
|
|||
// Do a normal method lookup first.
|
||||
if (ObjCMethodDecl *setter =
|
||||
LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {
|
||||
if (setter->isSynthesized() && warn)
|
||||
if (setter->isPropertyAccessor() && warn)
|
||||
if (const ObjCInterfaceDecl *IFace =
|
||||
dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {
|
||||
const StringRef thisPropertyName(prop->getName());
|
||||
|
@ -1068,7 +1068,7 @@ bool ObjCSubscriptOpBuilder::findAtIndexGetter() {
|
|||
0 /*TypeSourceInfo */,
|
||||
S.Context.getTranslationUnitDecl(),
|
||||
true /*Instance*/, false/*isVariadic*/,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true, /*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
false);
|
||||
|
@ -1184,7 +1184,7 @@ bool ObjCSubscriptOpBuilder::findAtIndexSetter() {
|
|||
ResultTInfo,
|
||||
S.Context.getTranslationUnitDecl(),
|
||||
true /*Instance*/, false/*isVariadic*/,
|
||||
/*isSynthesized=*/false,
|
||||
/*isPropertyAccessor=*/false,
|
||||
/*isImplicitlyDeclared=*/true, /*isDefined=*/false,
|
||||
ObjCMethodDecl::Required,
|
||||
false);
|
||||
|
|
|
@ -649,7 +649,7 @@ void ASTDeclReader::VisitObjCMethodDecl(ObjCMethodDecl *MD) {
|
|||
}
|
||||
MD->setInstanceMethod(Record[Idx++]);
|
||||
MD->setVariadic(Record[Idx++]);
|
||||
MD->setSynthesized(Record[Idx++]);
|
||||
MD->setPropertyAccessor(Record[Idx++]);
|
||||
MD->setDefined(Record[Idx++]);
|
||||
MD->IsOverriding = Record[Idx++];
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ void ASTDeclWriter::VisitObjCMethodDecl(ObjCMethodDecl *D) {
|
|||
}
|
||||
Record.push_back(D->isInstanceMethod());
|
||||
Record.push_back(D->isVariadic());
|
||||
Record.push_back(D->isSynthesized());
|
||||
Record.push_back(D->isPropertyAccessor());
|
||||
Record.push_back(D->isDefined());
|
||||
Record.push_back(D->IsOverriding);
|
||||
|
||||
|
|
|
@ -1021,12 +1021,12 @@ bool CursorVisitor::VisitObjCPropertyDecl(ObjCPropertyDecl *PD) {
|
|||
// Visit synthesized methods since they will be skipped when visiting
|
||||
// the @interface.
|
||||
if (ObjCMethodDecl *MD = prevDecl->getGetterMethodDecl())
|
||||
if (MD->isSynthesized() && MD->getLexicalDeclContext() == CDecl)
|
||||
if (MD->isPropertyAccessor() && MD->getLexicalDeclContext() == CDecl)
|
||||
if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
|
||||
return true;
|
||||
|
||||
if (ObjCMethodDecl *MD = prevDecl->getSetterMethodDecl())
|
||||
if (MD->isSynthesized() && MD->getLexicalDeclContext() == CDecl)
|
||||
if (MD->isPropertyAccessor() && MD->getLexicalDeclContext() == CDecl)
|
||||
if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ public:
|
|||
bool VisitObjCMethodDecl(ObjCMethodDecl *D) {
|
||||
// Methods associated with a property, even user-declared ones, are
|
||||
// handled when we handle the property.
|
||||
if (D->isSynthesized())
|
||||
if (D->isPropertyAccessor())
|
||||
return true;
|
||||
|
||||
handleObjCMethod(D);
|
||||
|
@ -228,12 +228,12 @@ public:
|
|||
}
|
||||
|
||||
if (ObjCMethodDecl *MD = PD->getGetterMethodDecl()) {
|
||||
if (MD->isSynthesized())
|
||||
if (MD->isPropertyAccessor())
|
||||
IndexCtx.handleSynthesizedObjCMethod(MD, D->getLocation(),
|
||||
D->getLexicalDeclContext());
|
||||
}
|
||||
if (ObjCMethodDecl *MD = PD->getSetterMethodDecl()) {
|
||||
if (MD->isSynthesized())
|
||||
if (MD->isPropertyAccessor())
|
||||
IndexCtx.handleSynthesizedObjCMethod(MD, D->getLocation(),
|
||||
D->getLexicalDeclContext());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue