initial test of context-dependant code completion

This commit is contained in:
Dave Holoway
2020-06-23 17:03:40 +01:00
parent cd6bf29e9f
commit 591907f523
5 changed files with 108 additions and 35 deletions

View File

@@ -3,6 +3,28 @@ const { resolveImports } = require('../java/import-resolver');
const { SourceUnit } = require('./source-types');
const { parseBody } = require('./body-parser3');
/**
* @param {SourceUnit} unit
* @param {Map<string, CEIType>} androidLibrary
*/
function parseMethodBodies(unit, androidLibrary) {
const resolved_types = [
...resolveImports(androidLibrary, [], [], null).resolved,
...unit.imports.filter(i => i.resolved).map(i => i.resolved),
]
unit.types.forEach(t => {
t.initers.forEach(i => {
i.parsed = parseBody(i, resolved_types, androidLibrary);
})
t.constructors.forEach(c => {
c.parsed = parseBody(c, resolved_types, androidLibrary);
})
t.sourceMethods.forEach(m => {
m.parsed = parseBody(m, resolved_types, androidLibrary);
})
})
}
/**
* @param {SourceUnit} unit
* @param {Map<string, CEIType>} androidLibrary
@@ -12,41 +34,20 @@ function validate(unit, androidLibrary) {
console.time('validation');
let probs = [];
const resolved_types = [
...resolveImports(androidLibrary, [], [], null).resolved,
...unit.imports.filter(i => i.resolved).map(i => i.resolved),
]
unit.types.forEach(t => {
t.initers.forEach(i => {
const parsed = parseBody(i, resolved_types, androidLibrary);
if (parsed)
probs = probs.concat(parsed.problems)
})
t.constructors.forEach(c => {
const parsed = parseBody(c, resolved_types, androidLibrary);
if (parsed)
probs = probs.concat(parsed.problems)
})
t.sourceMethods.forEach(m => {
const parsed = parseBody(m, resolved_types, androidLibrary);
if (parsed)
probs = probs.concat(parsed.problems)
})
})
const module_validaters = [
// require('./validation/multiple-package-decls'),
// require('./validation/unit-decl-order'),
// require('./validation/duplicate-members'),
// require('./validation/parse-errors'),
require('./validation/modifier-errors'),
require('./validation/unresolved-imports'),
require('./validation/invalid-types'),
require('./validation/bad-extends'),
require('./validation/bad-implements'),
require('./validation/non-implemented-interfaces'),
require('./validation/bad-overrides'),
require('./validation/missing-constructor'),
// require('./validation/modifier-errors'),
// require('./validation/unresolved-imports'),
// require('./validation/invalid-types'),
// require('./validation/bad-extends'),
// require('./validation/bad-implements'),
// require('./validation/non-implemented-interfaces'),
// require('./validation/bad-overrides'),
// require('./validation/missing-constructor'),
//require('./validation/expression-compatibility'),
];
let problems = [
@@ -73,4 +74,5 @@ function validate(unit, androidLibrary) {
module.exports = {
validate,
parseMethodBodies,
}