Skip to content

Commit f6cb2fb

Browse files
pzembrodcopybara-github
authored andcommitted
StarlarkProvider ArgumentProcessor simplification:
* remove 2 layers of construction methods * remove inheritance between ArgumentProcessorWithInit and RawArgumentProcessor Result: now the requestArgumentProcessor() overrides of both StarlarkProvider and RawConstructor directly contain constructor calls to ArgumentProcessorWithInit and/or RawArgumentProcessor, and the owner of ArgumentProcessorWithInit can be clearly typed as StarlarkProvider. The owner of RawArgumentProcessor remains a StarlarkCallable. PiperOrigin-RevId: 724639736 Change-Id: Ia0eb9a0b201b85c8fdb09cdd697f0b11d0a3ff51
1 parent 70b0afd commit f6cb2fb

File tree

1 file changed

+30
-31
lines changed

1 file changed

+30
-31
lines changed

src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -246,43 +246,35 @@ private StarlarkProvider(
246246
@Override
247247
public StarlarkCallable.ArgumentProcessor requestArgumentProcessor(StarlarkThread thread)
248248
throws EvalException {
249-
StarlarkCallable.ArgumentProcessor initArgumentProcessor = null;
249+
StarlarkInfoFactory factory = newStarlarkInfoFactory(thread);
250250
if (init != null) {
251-
initArgumentProcessor = Starlark.requestArgumentProcessor(thread, init);
251+
StarlarkCallable.ArgumentProcessor initArgumentProcessor =
252+
Starlark.requestArgumentProcessor(thread, init);
253+
return new ArgumentProcessorWithInit(this, factory, initArgumentProcessor, thread);
254+
} else {
255+
return new RawArgumentProcessor(this, factory, thread);
252256
}
253-
return newArgumentProcessor(this, thread, initArgumentProcessor);
254-
}
255-
256-
private StarlarkCallable.ArgumentProcessor requestRawArgumentProcessor(
257-
StarlarkCallable owner, StarlarkThread thread) {
258-
return newArgumentProcessor(owner, thread, null);
259257
}
260258

261-
private StarlarkCallable.ArgumentProcessor newArgumentProcessor(
262-
StarlarkCallable owner,
263-
StarlarkThread thread,
264-
StarlarkCallable.ArgumentProcessor initArgumentProcessor) {
265-
StarlarkInfoFactory factory =
266-
schema != null
267-
? StarlarkInfoWithSchema.newStarlarkInfoFactory(this, thread)
268-
: StarlarkInfoNoSchema.newStarlarkInfoFactory(this, thread);
269-
if (initArgumentProcessor != null) {
270-
return new ArgumentProcessorWithInit(
271-
(StarlarkProvider) owner, factory, initArgumentProcessor, thread);
272-
} else {
273-
return new RawArgumentProcessor(owner, factory, thread);
274-
}
259+
private StarlarkInfoFactory newStarlarkInfoFactory(StarlarkThread thread) {
260+
return schema != null
261+
? StarlarkInfoWithSchema.newStarlarkInfoFactory(this, thread)
262+
: StarlarkInfoNoSchema.newStarlarkInfoFactory(this, thread);
275263
}
276264

277-
static final class ArgumentProcessorWithInit extends RawArgumentProcessor {
265+
static final class ArgumentProcessorWithInit extends StarlarkCallable.ArgumentProcessor {
266+
private final StarlarkProvider owner;
267+
private final StarlarkProvider.StarlarkInfoFactory factory;
278268
private final StarlarkCallable.ArgumentProcessor initArgumentProcessor;
279269

280270
ArgumentProcessorWithInit(
281271
StarlarkProvider owner,
282272
StarlarkProvider.StarlarkInfoFactory factory,
283273
StarlarkCallable.ArgumentProcessor initArgumentProcessor,
284274
StarlarkThread thread) {
285-
super(owner, factory, thread);
275+
super(thread);
276+
this.owner = owner;
277+
this.factory = factory;
286278
this.initArgumentProcessor = initArgumentProcessor;
287279
}
288280

@@ -296,20 +288,28 @@ public void addNamedArg(String name, Object value) throws EvalException {
296288
initArgumentProcessor.addNamedArg(name, value);
297289
}
298290

291+
@Override
292+
public StarlarkCallable getCallable() {
293+
return owner;
294+
}
295+
299296
@Override
300297
public Object call(StarlarkThread thread) throws EvalException, InterruptedException {
301298
Object initResult =
302-
Starlark.callViaArgumentProcessor(
303-
thread, ((StarlarkProvider) owner).init, initArgumentProcessor);
299+
Starlark.callViaArgumentProcessor(thread, owner.init, initArgumentProcessor);
304300
Dict<String, Object> kwargs =
305301
Dict.cast(initResult, String.class, Object.class, "return value of provider init()");
306302
return factory.createFromMap(kwargs, thread);
307303
}
308304
}
309305

306+
/**
307+
* A {@link RawArgumentProcessor} is used for calling two different types of StarlarkCallable:
308+
* StarlarkProvider in case it doesn't have an init function, and RawConstructor.
309+
*/
310310
static class RawArgumentProcessor extends StarlarkCallable.ArgumentProcessor {
311-
protected final StarlarkCallable owner;
312-
protected final StarlarkProvider.StarlarkInfoFactory factory;
311+
private final StarlarkCallable owner; // either StarlarkProvider or RawConstructor
312+
private final StarlarkProvider.StarlarkInfoFactory factory;
313313

314314
RawArgumentProcessor(
315315
StarlarkCallable owner,
@@ -367,7 +367,7 @@ private RawConstructor(StarlarkProvider provider) {
367367

368368
@Override
369369
public StarlarkCallable.ArgumentProcessor requestArgumentProcessor(StarlarkThread thread) {
370-
return provider.requestRawArgumentProcessor(this, thread);
370+
return new RawArgumentProcessor(this, provider.newStarlarkInfoFactory(thread), thread);
371371
}
372372

373373
@Override
@@ -633,10 +633,9 @@ public boolean equals(Object obj) {
633633
return true;
634634
}
635635

636-
if (!(obj instanceof Key)) {
636+
if (!(obj instanceof Key other)) {
637637
return false;
638638
}
639-
Key other = (Key) obj;
640639
return Objects.equals(this.key, other.key)
641640
&& Objects.equals(this.exportedName, other.exportedName);
642641
}

0 commit comments

Comments
 (0)