Skip to content

Commit

Permalink
No longer generate Swift code for local Slice definitions (#1626)
Browse files Browse the repository at this point in the history
  • Loading branch information
bernardnormier authored Dec 28, 2023
1 parent e244738 commit f334410
Show file tree
Hide file tree
Showing 38 changed files with 15,614 additions and 12,398 deletions.
761 changes: 264 additions & 497 deletions cpp/src/slice2swift/Gen.cpp

Large diffs are not rendered by default.

17 changes: 0 additions & 17 deletions cpp/src/slice2swift/Gen.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,23 +143,6 @@ class Gen

IceUtilInternal::Output& out;
};

class LocalObjectVisitor : public SwiftGenerator, public ParserVisitor
{
public:

LocalObjectVisitor(::IceUtilInternal::Output&);

virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
virtual void visitOperation(const OperationPtr&);

private:

IceUtilInternal::Output& out;
};
};

}
Expand Down
81 changes: 40 additions & 41 deletions cpp/src/slice2swift/SwiftUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -608,8 +608,7 @@ void
SwiftGenerator::writeOpDocSummary(IceUtilInternal::Output& out,
const OperationPtr& p,
bool async,
bool dispatch,
bool local)
bool dispatch)
{
DocElements doc = parseComment(p);
if(!doc.overview.empty())
Expand All @@ -628,10 +627,6 @@ SwiftGenerator::writeOpDocSummary(IceUtilInternal::Output& out,
}

int typeCtx = TypeContextInParam;
if(local)
{
typeCtx |= TypeContextLocal;
}

const ParamInfoList allInParams = getAllInParams(p, typeCtx);
for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q)
Expand All @@ -647,20 +642,17 @@ SwiftGenerator::writeOpDocSummary(IceUtilInternal::Output& out,
}
}

if(!local)
out << nl << "///";
if(dispatch)
{
out << nl << "///";
if(dispatch)
{
out << nl << "/// - parameter current: `Ice.Current` - The Current object for the dispatch.";
}
else
{
out << nl << "/// - parameter context: `Ice.Context` - Optional request context.";
}
out << nl << "/// - parameter current: `Ice.Current` - The Current object for the dispatch.";
}
else
{
out << nl << "/// - parameter context: `Ice.Context` - Optional request context.";
}

typeCtx = local ? TypeContextLocal : 0;
typeCtx = 0;

if(async)
{
Expand Down Expand Up @@ -1065,28 +1057,13 @@ SwiftGenerator::typeToString(const TypePtr& type,
return "";
}

bool local = (typeCtx & TypeContextLocal) != 0;
if(local)
{
for(StringList::const_iterator i = metadata.begin(); i != metadata.end(); ++i)
{
const string swiftType = "swift:type:";
const string meta = *i;
if(meta.find(swiftType) == 0)
{
return meta.substr(swiftType.size());
}
}
}

string t = "";
//
// The current module where the type is being used
//
string currentModule = getSwiftModule(getTopLevelModule(toplevel));
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
bool nonnull = find(metadata.begin(), metadata.end(), "swift:nonnull") != metadata.end();
bool inparam = typeCtx & TypeContextInParam;

if(builtin)
{
Expand All @@ -1106,20 +1083,12 @@ SwiftGenerator::typeToString(const TypePtr& type,

if(cl)
{
if(cl->isInterface() && !cl->isLocal())
if(cl->isInterface())
{
t = fixIdent(getUnqualified(builtinTable[Builtin::KindValue], currentModule));
}
else
{
//
// Annotate nonnull closure as @escaping, Swift optional closure parameters are always
// @escaping see https://www.jessesquires.com/blog/why-optional-swift-closures-are-escaping/
//
if(cl->isLocal() && cl->definition() && cl->definition()->isDelegate() && inparam && nonnull)
{
t = "@escaping ";
}
t += fixIdent(getUnqualified(getAbsoluteImpl(cl), currentModule));
}
}
Expand Down Expand Up @@ -2780,6 +2749,11 @@ SwiftGenerator::writeDispatchAsyncOperation(::IceUtilInternal::Output& out, cons
bool
SwiftGenerator::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p)
{
if(p->isLocal())
{
return false;
}

p->setMetaData(validate(p, p->getMetaData(), p->file(), p->line(), p->isLocal()));
DataMemberList members = p->dataMembers();
for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
Expand Down Expand Up @@ -2826,6 +2800,11 @@ SwiftGenerator::MetaDataVisitor::visitOperation(const OperationPtr& p)
bool
SwiftGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p)
{
if(p->isLocal())
{
return false;
}

p->setMetaData(validate(p, p->getMetaData(), p->file(), p->line(), p->isLocal()));
DataMemberList members = p->dataMembers();
for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
Expand All @@ -2838,6 +2817,11 @@ SwiftGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p)
bool
SwiftGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p)
{
if(p->isLocal())
{
return false;
}

p->setMetaData(validate(p, p->getMetaData(), p->file(), p->line(), p->isLocal()));
DataMemberList members = p->dataMembers();
for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
Expand All @@ -2850,12 +2834,22 @@ SwiftGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p)
void
SwiftGenerator::MetaDataVisitor::visitSequence(const SequencePtr& p)
{
if(p->isLocal())
{
return;
}

p->setMetaData(validate(p, p->getMetaData(), p->file(), p->line(), p->isLocal()));
}

void
SwiftGenerator::MetaDataVisitor::visitDictionary(const DictionaryPtr& p)
{
if(p->isLocal())
{
return;
}

const string prefix = "swift:";
const DefinitionContextPtr dc = p->unit()->findDefinitionContext(p->file());
assert(dc);
Expand Down Expand Up @@ -2910,6 +2904,11 @@ SwiftGenerator::MetaDataVisitor::visitDictionary(const DictionaryPtr& p)
void
SwiftGenerator::MetaDataVisitor::visitEnum(const EnumPtr& p)
{
if(p->isLocal())
{
return;
}

p->setMetaData(validate(p, p->getMetaData(), p->file(), p->line(), p->isLocal()));
}

Expand Down
2 changes: 1 addition & 1 deletion cpp/src/slice2swift/SwiftUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class SwiftGenerator : private IceUtil::noncopyable
void writeDocSentence(IceUtilInternal::Output&, const StringList&);
void writeSeeAlso(IceUtilInternal::Output&, const StringList&, const ContainerPtr&);
void writeDocSummary(IceUtilInternal::Output&, const ContainedPtr&);
void writeOpDocSummary(IceUtilInternal::Output&, const OperationPtr&, bool, bool, bool = false);
void writeOpDocSummary(IceUtilInternal::Output&, const OperationPtr&, bool, bool);

void writeProxyDocSummary(IceUtilInternal::Output&, const ClassDefPtr&, const std::string&);
void writeServantDocSummary(IceUtilInternal::Output&, const ClassDefPtr&, const std::string&);
Expand Down
Loading

0 comments on commit f334410

Please sign in to comment.