|
1 | 1 | /******************************************************************************* |
2 | 2 | * SysML 2 Pilot Implementation |
3 | | - * Copyright (c) 2021-2025 Model Driven Solutions, Inc. |
| 3 | + * Copyright (c) 2021-2026 Model Driven Solutions, Inc. |
4 | 4 | * |
5 | 5 | * This program is free software: you can redistribute it and/or modify |
6 | 6 | * it under the terms of the GNU Lesser General Public License as published by |
@@ -436,23 +436,25 @@ public Type getLibraryType(String... defaultNames) { |
436 | 436 | protected List<Type> getBaseTypes() { |
437 | 437 | List<Type> baseTypes = new ArrayList<>(); |
438 | 438 | if (isGetBaseTypes) { |
439 | | - isGetBaseTypes = false; |
440 | 439 | Type target = getTarget(); |
441 | 440 | for (MetadataFeature metadataFeature : ElementUtil.getAllMetadataFeaturesOf(target)) { |
| 441 | + // Resolve metaclass proxy before getting base type, to avoid problems |
| 442 | + // with name resolution when applying semantic metadata. |
| 443 | + metadataFeature.getMetaclass(); |
| 444 | + isGetBaseTypes = false; |
442 | 445 | metadataFeature.getFeature().stream(). |
443 | 446 | filter(f->TypeUtil.specializes(f, getBaseTypeFeature(metadataFeature))). |
444 | 447 | map(FeatureUtil::getValueExpressionFor). |
445 | 448 | filter(expr->expr != null). |
446 | | - map(expr-> |
447 | | - expr.evaluate(metadataFeature)). |
| 449 | + map(expr->expr.evaluate(metadataFeature)). |
448 | 450 | filter(results->results != null && !results.isEmpty()). |
449 | 451 | map(results->results.get(0)). |
450 | 452 | map(EvaluationUtil::getMetaclassReferenceOf). |
451 | 453 | filter(Type.class::isInstance). |
452 | 454 | map(Type.class::cast). |
453 | 455 | forEachOrdered(baseTypes::add); |
| 456 | + isGetBaseTypes = true; |
454 | 457 | } |
455 | | - isGetBaseTypes = true; |
456 | 458 | } |
457 | 459 | return baseTypes; |
458 | 460 | } |
|
0 commit comments