Commit Graph

493 Commits

Author SHA1 Message Date
Grigorii Kirgizov c455514325 Get more precise info on invalidated nodes (fixes MPSCR-82)
Get information on invalidated nodes from EvaluateStep & incr processing
instead of UpdatesRecorder, which has only partial info and can't handle
all cases.
2020-12-15 17:51:23 +03:00
Fedor Isakov 8dd43190b4 Switch to finding aspect clique for subject node in local typechecking
During generation, the imports set of a transient model doesn't always
reflect the actual set of imported languages.
2020-12-15 13:32:54 +01:00
Fedor Isakov 159de90e6f Exclude free floating nodes from required set
Required nodes w/o a model, or "free floating" nodes
are excluded from the required set.
Instead all their valid references are processed.
2020-12-12 13:48:15 +01:00
Fedor Isakov d4f0c9741f Enable reuse of locally calculated types.
Typechecking results cache is consulted on a request to
locally calculate the type.
2020-12-11 12:03:17 +01:00
Fedor Isakov c7eaa1dbf3 Clean up ProgramEvaluator API. Straighten up passing of session token. Drop RulesDiff usages. 2020-12-08 22:57:36 +01:00
Fedor Isakov 4eab445aa9 Introduce overloaded "require" methods to keep track of dependencies.
TemplateApplicationSession allows to invoke require with the
input node as the first parameter, which is then forwarded as
a "requirement" (TODO: rename to dependency).
2020-12-08 22:57:35 +01:00
Fedor Isakov 616c39ae38 Fix incremental test launcher
The use of ProgramProducer and other stuff have new requirements.
The program is now produced incrementally, with UpdatesRecorder
playing a major role in keeping track of changes.
2020-12-08 22:57:35 +01:00
Fedor Isakov 59db13bf41 Simplify UpdatesRecorder implementation. Fix input processing by ProgramFactory.
Move invalidation logic inside UpdatesRecorder from elsewhere.
Drop type parameters.
Avoid recording dependencies for null input.

ProgramFactory: always process input, not only the first time
2020-12-08 12:50:36 +01:00
Fedor Isakov d637bed114 Enable cache data to be accesible with an Object key. Drop usages of PreambleSet.
PreambleSet exists only to allow to multiplex cached values by
query. There is no need for this now that the key can be a compound one.
2020-12-06 16:14:28 +01:00
Fedor Isakov e2926d8433 Enable reuse of RulesPlanHandler. 2020-12-06 10:52:11 +01:00
Fedor Isakov c6152abdc2 Fix RuleBuilder not processing macro's input concept.
A query may be invoked without the input node, thus dispatching
macros by the specified concept. The concept must be taken into
account when calculating the "diff", so that the old (stale)
rules don't override the updated ones.
2020-11-29 00:20:15 +01:00
Fedor Isakov 010e6cdc61 Minor refactoring: use Queries strategy for local typechecking too. 2020-11-27 10:06:09 +01:00
Fedor Isakov 4165c320ff Avoid throwing NPE on opening project, unload is called on an uninitialized plugin. 2020-11-24 13:48:42 +01:00
Fedor Isakov 73f610b597 Introduce new kind of typechecking query, typeOf, having a subject.
This query kind is to be used in local typechecking.
The idea is to do away with constraints that are not essential for
typechecking a single node, thus making local type computation faster.
2020-11-24 13:41:25 +01:00
Fedor Isakov acc3167e21 A bunch of optimizations and minor refactorings.
Consolidate options, configure all from typechecking plugin.
Introduce a computable option to control using traces.

Introduce shared state to be used at generation time.
Drop repository cache holder, replace with a field in state.
Fix singleton type collector.

Fix memory leak in strategy by cleaning it up after execution.
2020-11-24 13:41:25 +01:00
Fedor Isakov 5ce60c1398 Minor refactoring in typechecking service component: simplify code. 2020-11-24 13:41:25 +01:00
Fedor Isakov 4d79fbf263 Fix various issues arizing during generation time.
Avoid dereferencing DynamicReference from OriginIndex as it involves typechecking computation.
Aviod enqueing type nodes with TypesModelHandler during generation,
a workaround for "mature" references unable to be resolved
if target is in a transient (unpublished) model. (MPS-32709)
Ensure "local" typeof computation is used when queries a created with null root.
2020-11-24 13:41:25 +01:00
Fedor Isakov 1c04ec1a1d Avoid NPE in highlighting step if previous step(s) failed. 2020-11-24 13:41:24 +01:00
Fedor Isakov 2c8f1a9294 Disable baseline time when running typechecking query. 2020-11-24 13:41:24 +01:00
Fedor Isakov 9c616971e1 Ensure all relevant languages are searched for aspects.
It might be necessary to look a little further into the input node's
referenced nodes to gather all relevant models for recovering
types aspects. Example: a type in BL may extend another BL type
parameterized by a non-BL type, such as node<>.
2020-11-24 13:41:24 +01:00
Fedor Isakov 59f653aeee Enable incremental option in test.
Now that "main" constraint is a principal one the test passes.
2020-11-24 13:41:24 +01:00
Grigorii Kirgizov c44e3a7fd8 Upd buildscripts 2020-11-18 11:36:28 +03:00
Grigorii Kirgizov 42bc7a88fd Modify incremental tests to allow testing other queries, add test 2020-11-18 11:36:28 +03:00
Grigorii Kirgizov 1254ebd632 Handle case of query rules in PreambleInfo
Also process expand macro input for rule hash,
so that changed query rules (like one in testlang) get into
RulesDiff and could be updated with Preamble processing.
2020-11-18 11:36:28 +03:00
Grigorii Kirgizov 9d3b7e1fba Add program Preamble as SessionToken, use it in Queries strategy
Program Preamble consists of 2 parts: rules & Journal.
Preamble rules are no-input rules with rules for their required nodes.
Preamble journal is journal part with results of executing these rules.
Preamble is defined per-Query, because Journal differs for Queries.

Repository CacheHolder is used for storing them b/w sessions.
Rules are stored and  retrievied with Memoizer.
Journal is stored as SessionToken in PreambleSet (map Query->SessionToken).

Add option to IncrementalSpec -- incrementality level (Preamble or Full).
2020-11-10 10:40:06 +03:00
Fedor Isakov bf7bad4b4a Drop mockito lib, replace with ad-hoc solution, fix the tests. 2020-10-25 00:17:25 +02:00
Fedor Isakov 930100a47b Several fixes that guarantee stable order of rules in the program.
Ensure the order of rules in the resulting plan follows the priorities
set forward by extends relationship b/w languages. So that even if
rule template tables are unrelated, they are still ordered according to
language extension graph.
Ensure the order of rule lists in the resulting plan is stable b/w invocations of
RulesPlanHandler.allPlans().
Ensure the order of aspects in AspectClique is stable b/w invocations
of buildClique().

Associate RuleTemplatesTable with Manifest, and Manifest with CoderulesAspect.
Tentatively rename RulesList (the runtime object) to RulesPlan,
RulesListTable to RulesPlanHandler.
2020-10-23 12:26:30 +02:00
Grigorii Kirgizov cc9c4c54b3 Specify notion of required nodes: separately for tmpl application & for UpdatesRecorder
Too many nodes get into tmpl application process, which is unnecessary.
Many of those nodes are required actually only for correctly tracking
changes to nodes with WatchingTypecheckingStrategy.

Now implicitly required only nodes which are mentioned inside
constraint arguments. In other cases user must require them explicitly.
2020-10-23 12:26:30 +02:00
Grigorii Kirgizov 99c823d4f7 Integrate tmpl trace in ApplyTemplatesStep with TypecheckingOptions
Introduce TraceReport object for passing program results
(traces+report items) instead of using tuples.
2020-10-08 17:34:43 +03:00
Grigorii Kirgizov 1de365de9c Introduce trace tool for rule template application 2020-10-08 17:34:42 +03:00
Fedor Isakov 25e8e5fd78 Clear shared caches on releasing queries for generator. 2020-09-15 13:32:43 +02:00
Fedor Isakov 613b981977 Refactor UpdatesRecorder for better handling of nodes invalidation.
Alter the way invalidated nodes are handled by UpdatesRecorder.
A set of "source" nodes is now maintained, which helps to
detect the appropriate input for a changed node.
Templates are applied only to "new" or "invalidated" nodes.
2020-09-13 13:31:03 +02:00
Fedor Isakov 534c4832ce Re-saved models -- update resolve info. 2020-09-10 09:59:42 +02:00
Fedor Isakov 2d9e3547b6 Refactoring: simplify RelevantNodes[Tracker -> Monitor], drop interface and stub impl.
Rename TypeDependenciesNodeTracker to RelevantNodesMonitor and
have it the only implementation.
The "stub" implementation was never really used.
Simplify creation of and access to the monitor.
2020-09-10 09:57:53 +02:00
Fedor Isakov 9c7307286b Minor refactoring of UpdatesRecorder: straighten up API, better encapsulation. 2020-09-10 09:53:01 +02:00
Fedor Isakov 74e8eb86b1 Drop unused method in TemplateApplicationSession 2020-09-10 09:53:01 +02:00
Fedor Isakov 2d9861e8a2 Avoid triggering NPE on calling ProviderInitToken.deactivate. 2020-09-10 09:53:01 +02:00
Grigorii Kirgizov 3a8bff821f Don't process macro args in 'usedDataHash' in RuleBuilder: it's unnecessary
Commit f9ca9f27 handles hash of macro bodies, making this functionality unnecessary.
Potentially less nodes can pass into 'required'.
2020-09-01 13:37:45 +03:00
Fedor Isakov 394459b17b Refactor typechecking cache to avoid updating model roots.
Instead of copying cached data just re-plant the fields to the new cache.
The new types-model to contain only the newly reported types. Types reported on earlier invocations are retained
in previously created models.
2020-08-20 14:20:52 +02:00
Fedor Isakov ca62bb0781 Ensure queries cache gets cleared even with no root node. 2020-08-20 14:20:52 +02:00
Fedor Isakov 248f71bb1d Drop unused overridden methods. 2020-08-20 14:20:52 +02:00
Fedor Isakov f085d10369 Temporary fix for tests: set tracking=true in TypecheckingTesetHelper.checkTypes(). 2020-08-14 17:42:19 +02:00
Fedor Isakov 54439e255e Refactor typechecking state/cache subsystem.
Refactor whe way TypecheckingResultsCache is updated:
all mutatiting methods extracted to Update subclass, which is
only available to the updater.

Make TypecheckingState a regular container for (unit) caches.
Make TypecheckingService responsible for managing caches.

Extract TypeModuleOwner and TypeModelHandler classes.
Get rid of QueryResultsCache, merge into TypecheckingResultsCache.
TypeModuleOwner to manage "repository" cache.
2020-08-14 16:57:36 +02:00
Fedor Isakov 905e11ac33 Refactor TypecheckingService API: simplify usage, extract Request.
Request is to keep all the parameters of a given API call,
whereas TypecheckingService is to handle the state between
calls.
2020-08-14 16:17:23 +02:00
Fedor Isakov d07b1d1517 Add option to report evaluation results. Reorganize options in pref pane.
When running typechecking with trace=on too much memory is taken up
by the traces, the new option enables to see the evaluation results
without collecting the traces.
2020-08-12 12:38:51 +02:00
Fedor Isakov 1bc6611a65 Use NPE guard in deactivate(). 2020-08-12 12:38:51 +02:00
Fedor Isakov 6348afaee5 Introduce CachingIncremental strategy for running typechecking. Minor fixes and code cleanup.
Optimization: Use repo/unit caches for storing various data in Caching strategy
Fix: introduce workaround for nodes coming from generator's transient model --
avoid clearing cache for non-resolvable origin nodes.
Fix: incrProgSpec not passed correctly downstream, incremental mode working only with trace on.
Refactoring: make TypesCollector a (private) singleton. TBD.
Rename SessionData -> CachedData.
2020-08-06 17:45:47 +02:00
Fedor Isakov 29bb1c72cd Allow Config.init() to be called multiple times. Ensure test passes alone. 2020-08-06 17:45:47 +02:00
Fedor Isakov 3bf644f766 Introduce strategy for running queries, ensure Memo is used. 2020-08-06 17:45:47 +02:00
Fedor Isakov 32b11c0c7f Introduce memo expression to enable memoization of values.
During template application memo can be used to store results
of a computation in the session. The memo will be automatically
cleared on an event that invalidates the caches.
2020-07-30 17:14:40 +02:00