From 950310ff911da6c26339f4dc0b124487adc0cdbb Mon Sep 17 00:00:00 2001 From: Dmitry Lomov Date: Wed, 1 Mar 2017 17:45:12 +0000 Subject: Rollback of commit 34ffc4cab1b6cdde54e5945427b79c24fff39aa5. *** Reason for rollback *** Roll-forward of commit 01120026dc313ee7ad9ea95069a29252eb19173b with fix. *** Original change description *** Automated [] rollback of commit 01120026dc313ee7ad9ea95069a29252eb19173b. -- PiperOrigin-RevId: 148897534 MOS_MIGRATED_REVID=148897534 --- .../lib/skyframe/SkylarkImportLookupFunction.java | 45 ++++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java') diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java index fb68cb2fe6..08c6cf5395 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java @@ -27,18 +27,21 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.RuleClassProvider; -import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions; +import com.google.devtools.build.lib.packages.SkylarkExportable; import com.google.devtools.build.lib.skyframe.SkylarkImportLookupValue.SkylarkImportLookupKey; +import com.google.devtools.build.lib.syntax.AssignmentStatement; import com.google.devtools.build.lib.syntax.BuildFileAST; import com.google.devtools.build.lib.syntax.Environment.Extension; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.LoadStatement; import com.google.devtools.build.lib.syntax.Mutability; import com.google.devtools.build.lib.syntax.SkylarkImport; +import com.google.devtools.build.lib.syntax.Statement; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; @@ -367,12 +370,7 @@ public class SkylarkImportLookupFunction implements SkyFunction { .createSkylarkRuleClassEnvironment( extensionLabel, mutability, eventHandler, ast.getContentHashCode(), importMap) .setupOverride("native", packageFactory.getNativeModule(inWorkspace)); - ast.exec(extensionEnv, eventHandler); - try { - SkylarkRuleClassFunctions.exportRuleFunctionsAndAspects(extensionEnv, extensionLabel); - } catch (EvalException e) { - eventHandler.handle(Event.error(e.getLocation(), e.getMessage())); - } + execAndExport(ast, extensionLabel, eventHandler, extensionEnv); Event.replayEventsOn(env.getListener(), eventHandler.getEvents()); if (eventHandler.hasErrors()) { @@ -382,6 +380,39 @@ public class SkylarkImportLookupFunction implements SkyFunction { } } + public static void execAndExport(BuildFileAST ast, Label extensionLabel, + EventHandler eventHandler, + com.google.devtools.build.lib.syntax.Environment extensionEnv) throws InterruptedException { + ImmutableList statements = ast.getStatements(); + for (Statement statement : statements) { + ast.execTopLevelStatement(statement, extensionEnv, eventHandler); + possiblyExport(statement, extensionLabel, eventHandler, extensionEnv); + } + } + + private static void possiblyExport(Statement statement, Label extensionLabel, + EventHandler eventHandler, + com.google.devtools.build.lib.syntax.Environment extensionEnv) { + if (!(statement instanceof AssignmentStatement)) { + return; + } + AssignmentStatement assignmentStatement = (AssignmentStatement) statement; + ImmutableSet boundNames = assignmentStatement.getLValue().boundNames(); + for (String name : boundNames) { + Object lookup = extensionEnv.lookup(name); + if (lookup instanceof SkylarkExportable) { + try { + SkylarkExportable exportable = (SkylarkExportable) lookup; + if (!exportable.isExported()) { + exportable.export(extensionLabel, name); + } + } catch (EvalException e) { + eventHandler.handle(Event.error(e.getLocation(), e.getMessage())); + } + } + } + } + @Override public String extractTag(SkyKey skyKey) { return null; -- cgit v1.2.3