From 46838686ea3a1434dec5471100774bb32d31fae0 Mon Sep 17 00:00:00 2001 From: Dave Holoway Date: Tue, 16 Jun 2020 16:01:21 +0100 Subject: [PATCH] ignore unresolved types in extends/implements --- langserver/java/validation/bad-extends.js | 10 +++++++--- langserver/java/validation/bad-implements.js | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/langserver/java/validation/bad-extends.js b/langserver/java/validation/bad-extends.js index 16e71ba..c71601a 100644 --- a/langserver/java/validation/bad-extends.js +++ b/langserver/java/validation/bad-extends.js @@ -1,15 +1,19 @@ -const { SourceType, SourceTypeIdent } = require('../source-type'); +const { SourceType } = require('../source-type'); const ParseProblem = require('../parsetypes/parse-problem'); +const { AnyType } = require('../body-types'); /** * @param {SourceType} source_type * @param {*} probs */ function checkExtends(source_type, probs) { - if (source_type.extends_types.length === 0) { + const supertypes = source_type.extends_types + .map(st => st.resolved) + .filter(t => !(t instanceof AnyType)); + + if (supertypes.length === 0) { return; } - const supertypes = source_type.extends_types.map(st => st.resolved); const supertype = supertypes[0]; if (source_type.typeKind === 'enum') { probs.push(ParseProblem.Error(source_type.extends_types[0].tokens, `Enum types cannot declare a superclass`)); diff --git a/langserver/java/validation/bad-implements.js b/langserver/java/validation/bad-implements.js index 1d2a2df..d7182d0 100644 --- a/langserver/java/validation/bad-implements.js +++ b/langserver/java/validation/bad-implements.js @@ -1,5 +1,6 @@ const ParseProblem = require('../parsetypes/parse-problem'); const {SourceType} = require('../source-type'); +const { AnyType } = require('../body-types'); const { UnresolvedType } = require('java-mti'); /** @@ -7,15 +8,18 @@ const { UnresolvedType } = require('java-mti'); * @param {*} probs */ function checkImplements(source_type, probs) { - if (source_type.implements_types.length === 0) { + const superinterfaces = source_type.implements_types + .map(st => st.resolved) + .filter(t => !(t instanceof AnyType)); + + if (superinterfaces.length === 0) { return; } - const interfaces = source_type.implements_types.map(it => it.resolved); if (source_type.typeKind === 'interface') { probs.push(ParseProblem.Error(source_type.implements_types[0].tokens, `Interface types cannot declare an implements section`)); } if (source_type.typeKind === 'class') { - interfaces.forEach((intf, i) => { + superinterfaces.forEach((intf, i) => { if (intf instanceof UnresolvedType) { return; }