@Override public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { Expression scope = wrappedNode.getScope(); if (wrappedNode.getField().toString().equals(name)) { ResolvedType typeOfScope = JavaParserFacade.get(typeSolver).getType(scope); if (typeOfScope.isArray() && name.equals(ARRAY_LENGTH_FIELD_NAME)) { return Optional.of(new Value(ResolvedPrimitiveType.INT, ARRAY_LENGTH_FIELD_NAME)); } if (typeOfScope.isReferenceType()) { Optional<ResolvedType> typeUsage = typeOfScope.asReferenceType().getFieldType(name); if (typeUsage.isPresent()) { return Optional.of(new Value(typeUsage.get(), name)); } else { return Optional.empty(); } } else { return Optional.empty(); } } else { return getParent().solveSymbolAsValue(name, typeSolver); } }
@Override public Optional<Value> solveSymbolAsValue(String name, TypeSolver typeSolver) { Expression scope = wrappedNode.getScope(); if (wrappedNode.getField().toString().equals(name)) { ResolvedType typeOfScope = JavaParserFacade.get(typeSolver).getType(scope); if (typeOfScope.isArray() && name.equals(ARRAY_LENGTH_FIELD_NAME)) { return Optional.of(new Value(ResolvedPrimitiveType.INT, ARRAY_LENGTH_FIELD_NAME)); } if (typeOfScope.isReferenceType()) { Optional<ResolvedType> typeUsage = typeOfScope.asReferenceType().getFieldType(name); if (typeUsage.isPresent()) { return Optional.of(new Value(typeUsage.get(), name)); } else { return Optional.empty(); } } else { return Optional.empty(); } } else { return getParent().solveSymbolAsValue(name, typeSolver); } } }
@Override public Optional<Value> solveSymbolAsValue(String name) { Expression scope = wrappedNode.getScope(); if (wrappedNode.getName().toString().equals(name)) { ResolvedType typeOfScope = JavaParserFacade.get(typeSolver).getType(scope); if (typeOfScope.isArray() && name.equals(ARRAY_LENGTH_FIELD_NAME)) { return Optional.of(new Value(ResolvedPrimitiveType.INT, ARRAY_LENGTH_FIELD_NAME)); } if (typeOfScope.isReferenceType()) { if (typeOfScope.asReferenceType().getTypeDeclaration().isEnum()) { ResolvedEnumDeclaration enumDeclaration = (ResolvedEnumDeclaration)typeOfScope.asReferenceType().getTypeDeclaration(); if (enumDeclaration.hasEnumConstant(name)) { return Optional.of(new Value(enumDeclaration.getEnumConstant(name).getType(), name)); } } Optional<ResolvedType> typeUsage = typeOfScope.asReferenceType().getFieldType(name); return typeUsage.map(resolvedType -> new Value(resolvedType, name)); } else { return Optional.empty(); } } else { return getParent().solveSymbolAsValue(name); } }